0
点赞
收藏
分享

微信扫一扫

不坑盒子 (Office、WPS插件)高效办公,让你提前进入摸鱼状态。

Star英 2023-05-05 阅读 84

目录

文件内容读写的形式

字符流

字节流

文件内容操作

InputStream:以字节流的形式进行读操作

创建方式:

FileInputStream的构造方法:

常用的构造方法:

读操作read:

这里的read有三个版本

 

OutputStream:以字节流的方式进行写操作

创建对象

写操作:write

字符流读写操作:Reader和Writer

Reader:以字符流的形式进行读文件操作

Writer:以字符流的形式进行写文件操作

关闭文件资源释放相关

不释放资源的后果

针对文件资源泄露的情况,我们有下面两种方法:

1. 手动调用close方法进行资源关闭

2. try with resources 写法:

为什么能自动释放:



文件内容读写的形式

字符流

字节流

文件内容操作

InputStream:以字节流的形式进行操作

创建方式:

原码:

正确的创建方式:

InputStream inputStream = new FileInputStream();

FileInputStream的构造方法:

常用的构造方法:

1. 以File对象作为参数,对该对象指定的文件内容进行操作

2. 以文件路径(绝对路径/相对路径)作为参数,对指定文件的内容进行操作

注意:需要抛出异常:FileNotFoundException:如果操作的文件不存在就会抛出该异常

例如:

InputStream inputStream = new FileInputStream("test1/test.txt");

读操作read:

由于这个test.txt文件中没有数据,所以我们手动写入一个hello world

通过调用read方法

        这里使用我们上面例子中创建的inputStream对象

inputStream.read();

原码解释说明:

这里的read有三个版本

1. 无参的read版本:read()

try(InputStream inputStream = new FileInputStream("test1/test.txt")){
     //.....这里面进行inputStream这个文件对象的文件操作
     while(true){
           int b = inputStream.read();
           if(b == -1){
                //当read的返回值为-1时,说明文件数据已经被读完了
                break;
           }
           System.out.println(b);
     }
}

结果:

System.out.print((char)b;//通过char强转成字符类型显示

结果:

2. 带一个byte数组的参数版本:read(byte[] b)

3.  带三个参数的版本:read(byte[] b , int off , int len)


OutputStream:以字节流的方式进行写操作

操作和前面的InputStream基本一样

创建对象

OutputStream outputStream = new FileOutputStream("test1/test.txt")

FileOutputStream常见的构造方法

1. 以File对象作为参数,对该对象指定的文件内容进行操作

2. 以文件路径(绝对路径/相对路径)作为参数,对指定文件的内容进行操作

注意:需要抛出异常:FileNotFoundException:如果操作的文件不存在就会抛出该异常

写操作:write

使用上面创建的outputStream对象调用write方法

outputStream.write();

write方法也有几种版本

 1. 无参版本:write(int b)

try(OutputStream outputStream = new FileOutputStream("test1/test.txt")){
    outputStream.write(98);
}

2. 带有一个byte数组参数的版本:write(byte[] b)

3. 带三个参数的版本:write(byte[] b , int off , int len)



字符流读写操作:Reader和Writer

Reader:以字符流的形式进行读文件操作

代码:

try(Reader reader = new FileReader("test1/test.txt")){
      while(true){
           int b = reader.read();
           if(b == -1){
               break;
           }
           System.out.println((char)b);
     }
} catch (IOException e) {
     e.printStackTrace();
}

Writer:以字符流的形式进行写文件操作

代码:

try(Writer writer = new FileWriter("test1/test.txt")) {
      writer.write('a');
      writer.write('b');
      writer.write('c');
} catch (IOException e) {
      e.printStackTrace();
}

结果:


关闭文件资源释放相关

不释放资源的后果

针对文件资源泄露的情况,我们有下面两种方法:

1. 手动调用close方法进行资源关闭

inputStream.close();

2. try with resources 写法:

带有资源的try操作,会在try代码块结束,会自动对资源执行close操作

写法:

把创建InputStream等这些的I/O组类对象时,放入try中创建,再在try代码块中进行对象的文件文件操作,在退出代码块时会自动释放try中创建的I/O资源(推荐写法:自动释放不会遗忘更稳妥

try(InputStream inputStream = new FileInputStream("test1/test.txt")){
    //.....这里面进行inputStream这个文件对象的文件操作
}

为什么能自动释放:


举报

相关推荐

0 条评论