java知识点总结IO

IO的操作部分重点掌握两个代码模型,IO的核心组成是5个类(File、OutputStream、InputStream、Reader、Writer)一个接口(Serializable)

File文件操作类:

java.io.File是一个普通类,直接产生实例化对象即可。如果要实例化对象则需要用到两个构造方法:

public File(String pathname);

public File(String parent,String child);根据父路径与子路径取得实例化File对象

如果要进行文件的基本操作,可以使用File类的如下方法:

public boolean creatNewFile()throws IOException   :创建文件

File类只是创建文件本身,但是对内容并不做处理 

判断文件是否存在: public boolean exists();

删除文件:public boolean delete();

取得操作系统分隔符:public static finally String separator

 

目录操作:

取得父路径或者父File对象:public String getParent():取得父路径 

public File getParentFile():取得父File对象

创建父路径:若想创建父路径,此时最好取得父路径的File类对象

public boolean mkdirs():无论多少级父目录,全都一次创建

判断父目录是否存在以及父目录的创建操作非常重要,对开发很重要

 

获取文件信息:

判断路径是否是文件:public boolean isFile()

判断路径是否是目录:public boolean isDirectory();

取得文件的大小:public boolean length():单位为字节

最后一次修改日期:public long lastModified()

取得一个目录的全部组成:public File[] listFiles()

 

字节流与字符流:

File类不支持文件内容操作,如果要处理文件内容,必须要通过流的操作模式来完成,流分为输入流和输出流

 

在java.io包中,流分为两种:字节流和字符流

字节流:InputStream,OutputStream

字符流:Reader,Writer

字节流是原生操作   字符流是处理后的操作

流的操作模式: 以文件输出为例: 1.根据文件路径取得File类

                                                        2.取得File对象的输入输出流

                                                        3.通过输入输出流进行数据的传输

                                                        4.关闭流(非常重要)

对于IO操作属于资源处理,所有的资源处理操作(IO操作,数据库操作,网络)最好必须要进行关闭

OutputStream类实现了Closeable,Flushable两个接口,这两个接口中的方法:

Closeable:public void close()throws IOException  关闭流处理

Flushable:public void flush()throws IOException 刷新缓冲区

 

在OutputStream类中还定义有其他方法:

1.将给定的字节数组内容全部输出:public void write()(byte[])throws IOException

2.将部分字节数组内容输出:public void write(byte[],int off 起始位置,int len 长度)throws IOException

3.输出单个字节:public abstract void write(int b1)throws IOException

在进行文件传输时,所有的文件会帮助用户自动创建,无需调用creatnewFile()手动创建

write方法,文件默认输出为覆盖输出、

 

AutoCloseable支持自动关闭:但是由于要结合try。。。catch使用,且使用方式比较特殊,所以不推荐使用

 

字节输入流:InputStream

InputStream类在程序中读取文件内容

InputStream只实现了Closeable接口,在InputStream类中提供有如下方法:

1.读取数据到字节数组中,返回数据的读取个数。如果此时开辟的字节数组的大小大于读取的数据大小,返回的就是读取的个数,如果要读取的数据大于数组的内容,那么这个时候返回的就是数组长度,如果没有数据了还在读则返回-1;public int read(byte[])throws IOException 最常用方法

2.读取部分数据到字节数组中,每次只读取传递数组的部分内容,如果读取满了则返回长度(len),如果没有读取满则返回读取的数据个数,如果读取到最后没有数据了,就返回-1:public int read (byte[],int off ,int len)throws IOException

3.读取单个字节,每次读取一个字节的内容,直到没有数据了返回-1:public abstract int read()throws IOException

同OutputStream的使用一样,InputStream是一个抽象类,如果要对其实例化,同样也需要使用子类,如果哟啊对文件进行处理,则需要使用FileInputStream类

 

字符输出流:Writer

字符适合处理中文数据,Writer是字符输出流的处理类,这个类的定义如下:

public abstract class Writer implements Appendable ,Closeable ,Flushable

不关闭流,数据无法输出到终端,因为字符有缓冲区,或者通过强制清空缓冲区的方式flush(),如果不关闭强制进行输出,调用flush()方法

Writer提供了一个直接输出字符串的方法:

public void writer (String str)throws IOException

以后进行IO处理时,如果处理图片,音乐,文字都可以使用字节流,只有处理中文才考虑使用字符流

 

字符输出流:Reader

方法同InputStream,只不过是字符

Reader依然是一个抽象类

Reader中没有方法可以直接读取字符串类型,这时候只能通过在字符数组进行读取操作

 

转换流:字节流和字符流是可以互相进行转换的

字符编码:

常用的字符编码有: 1.GBK、GB2312:表示的是国标编码,GBK包含简体和繁体中文,而GB2312只包含简体中文,也就是说,这两种编码都是描述中文的编码

2.UNICODE编码:java提供的16进制编码,可以描述世界上任意的文字信息,但是如果现在所有的字母都使用16进制编码,那么这个编码太庞大了,会造成网络传输负担

3.ISO859-1:国际通用编码,但是所有的编码都需要进行转换

4.UTF编码,相当于结合了2和3,也就是说需要用到16进制文字使用UNICODE,而如果是字母就使用ISO8859-1,而常用的就是UTF-8编码格式

乱码产生分析:90%都是编解码不一致

内存操作流:以内存做为终端

1.字节内存流:ByteArrayInputStream、ByteArrayOutputStream

2.字符内存流:CharArrayReader、CharArrayWriter

 

打印流:属于OutputStream功能的增强版本,其本质不会脱离OutputStream

打印流分为字节打印流:PrintStream、字符打印流:PrintWriter

打印流属于典型的装饰设计模式,核心仍然是某个类的功能,但是为了得到更好的操作效果,扩充其功能而已

输出流就用打印流,输入流就用Scanner。Scanner可以接收各种数据类型,帮助用户减少转型处理,可以对接收的数据类型使用正则表达式

next和hasnext当遇到tab、换行、空格时默认作为新的个体

取得指定类型的数据:public 数据类型 nextXXX()

定义分隔符:public Scanner useDelimiter(Pattern pattern)

构造方法:public Scanner(InputStream source)

判断是否有指定类型数据:public boolean hasNextXXX()

 

序列化:

基本概念:将内存中的对象变为二进制数据流的形式进行传输,或是将其保存在文本中,但是并不是所有的类的对象都能被序列化,这个类必须实现java。io。Serializable接口,但是这个接口并没有任何的方法定义,只是一个标识而已。JVM会识别此类然后序列化

如果要实现序列化与反序列化的对象操作,在java。io包中提供有两个处理类ObjectOutputStream、ObjectInputStream

readObject()讲对象反序列化输入,writeObject(Object obj)将对象序列化输出

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值