在写Java程序中,在IDEA中可以对文件内部的信息进行操作,以下由Inputstream和Outputstream的知识总结。
File:
在进行文件输入输出流之前,要先打开一个文件,通过File的类来进行初始化一个文件对象,并传入一个字符串,该字符串写的是文件的路径,可以是相对路径也可以是绝对路径。
然后可以用file对象来进行一系列获取文件的操作:
Inputstream:
Inputstream本身是一个抽象类,没有具体的方法,但是可以实例化FileInputstream来继承它,然后就可以使用FileInpustream里面的方法。
然后在实例化FileInputstream里面放入刚刚打开的文件:
这样就算打开了一个文件的输出流
具体操作有read方法:
read方法重载了几种类型:
1:不传入参数,直接返回文档中一个字节的数据,用int接收。
2:传入参数byte[]数组,返回读出的字节长度,用int接收,若读取完了返回-1;
3:传入参数byte[]数组,以及需要读取的字节长度,数组的off到len用来存放读取的字节,最多读取len-off个字节,返回具体读出来的字节长度。
当文档中有字符串“hello world!”:
进行读取操作:
Outputstream
跟Inputstream类似,Outputstream也是一个抽象类,通过FileOutputstream来进行写入文档操作。
FileOutstream里面有方法write来进行文档的写入操作:
write也是被重载了几种类型:
1:直接写入一个字符。
2:传入参数byte[]数组,将byte[]数组里面的字节信息写入到文档。
3:传入参数byte[]数组,以及写入的开头和结尾,off到len是指byte[]下标,写入长度为len-off个字节的长度。
注意:
1)要区分二进制文件和文本文件的区别,二进制文件一般用数据流进行写入和读取,针对文本文件一般使用字符流进行写入和读取,常见使用字符流的操作有Scanner和PrintWriter等等。
2)还有编码的问题,事实上所有的文件都可以用字节流进行读取,但是由于编码的不同,导致一些字符所占用的字节数不同,在进行字节流读取文本文件的时候指是一个字节一个字节进行读取,当遇到比如说utf-8编码的时候,一个中文字符是用三个字节存储的,但是字节流直接一个字节一个字节进行读取,会把三个字节的中文字符拆开,导致写入或者读取的时候发生错误,导致读取错误。