目录:
一、IO流介绍
二、案例
一、IO流介绍
在java中,操作文件(读写)是通过IO流相关的类来实现的。
在java标准库中,对于IO的操作提供了很多现成的类,这些类都放在了java.io这个包里。
标准库中的这些类,大概可以分成两类:
一大类是操作字节的(以字节为单位进行读写)
一大类是操作字符的(以字符为单位进行读写)
字节-8个比特位,表示存储空间的基本单位;字符,表示一个“文字符号”,一个字符是由多个字节构成的。因为就需要根据文件类型,来决定是按照字节来操作还是按照字符来操作。有的文件是二进制文件,需要按照字节来操作;有的文件是文本文件,需要按照字符来操作。
那么怎么去区分一个文件是文本还是二进制文件呢?
一个特别简单粗暴的办法就是:使用记事本打开,看看文件里面的内容是不是乱码的,如果是乱码的,则是二进制文件;如果不是乱码的,则是文本文件的。因为记事本是默认按照文本的方式来打开解析文件的。
针对字节为单位进行读写的类,统称为“字节流”。
字节流:InputStream、FileInputStream、OutputStream、FileOutputStream
其中InputStream和FileInputStream是用来读取数据的,即输入;OutputStream和FileOutputStream是用来写入数据的,即输出。FileInputStream和FileOutputStream是专门用来操作文件的,他们是一个类,分别实现了InputStream和OutputStream的接口;InputStream和OutputStream是一个更抽象的接口,既可以操作文件,也可以操作网络相关的等等。
针对字符为单位进行读写的类,统称为“字符流”。
字符流:Reader、FileReader、Writer、FileWriter
其中Reader和FileReader是用来读取数据的,即输入的;Writer和FileWriter是用来写入数据的,即输出的。
二、案例
public class TestFile {
public static void main(String[] args) throws IOException {
//把一个文件的内容读取出来,写入到另一个文件中
String srcPath = "d:/code/test1.txt";
String destPath = "d:/code/test2.txt";
//这个代码用来打开第一个用来读数据的文件
FileInputStream fileInputStream = new FileInputStream(srcPath);
//这个代码用来打开第二个用来写数据的文件
FileOutputStream fileOutputStream = new FileOutputStream(destPath);
//循环的把第一个文件的内容按照字节读取出来,依次写入到第二个文件中
while (true){
//read方法依次返回的是一个字节(byte),但是实际上是使用int来接收的。
//这样做的理由主要是两个方面:
//1.java不存在无符号类型,byte这样的类型也是有符号的(有正负),byte表示的范围是 -128 - 127;
//实际上在按照字节读取数据的时候,正负就没有意义了,期望读到的结果是无符号的数字
//2.read如果读取完毕,文件读到末尾了,就会返回EOF(end of file),用-1来表示
int ch = fileInputStream.read();
if (ch == -1)break;
fileOutputStream.write(ch);
}
//文件操作完毕之后,要关闭文件;如果忘记关闭,可能会引起“文件资源泄漏"
fileInputStream.close();
fileOutputStream.close();
}
}
注意点1:当我们写了 FileInputStream 的时候,会出现受查异常,我们需要处理。但是我们在main方法上加上 IOException 的声明的时候,FileNotFoundException就不见了,同时上面变成灰色的了。
这是因为 FileNotFoundException 也是一种 IOException (FileNotFoundException是IOException的子类),使用throws IOException就能覆盖FileNotFoundException。
注意点2:文件操作完毕之后,要关闭文件;如果忘记关闭,可能会引起“文件资源泄漏”。这是因为一个进程能够同时打开的文件个数是存在上限的,受限于操作系统内核里面的实现。对于Linux来说,进程PCB中存在一个属性,文件描述符表,其大小也是存在上限的。Linux中,可以通过ulimit命令来查看/修改能够支持的最大文件个数。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/94447.html