java-关闭流

前言

在java中,流在使用结束后都应该及时关闭,否则会影响到程序的进行,尤其是当程序比较庞大的时候会影响业务的正常开展


 

在try中关闭

这种关闭方法的弊端在于如果在执行时抛出了异常,流就不会关闭,不建议使用这种方法来关闭流

如:

 1 package IO流;
 2 
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 
 7 public class 字节流写入数据 {
 8 
 9     public static void main(String[] args) {
10         File f=new File("D://1.txt");
11         try {
12             byte [] data= {75,101,118,105,110};
13             FileOutputStream fout=new FileOutputStream(f);
14             fout.write(data);
15             fout.close();
16         }catch(IOException e) {
17             e.printStackTrace();
18         }
19     }
20 
21 }

在finally中关闭

这种方法比较繁琐,但是安全可靠。首先在try外声明流,因为如果在try中声明流,流不会作用在finally中。其次,在finally中执行关闭流之前要判断流是否为null。最后,关闭流的操作要在包上一层try-catch处理

如:

 1 package IO流;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.IOException;
 7 
 8 public class 字节流读取文件 {
 9 
10     public static void main(String[] args) {
11         File f=new File("D://1.txt");
12         FileInputStream fs=null;
13         try {
14             fs=new FileInputStream(f);
15             byte[] s=new byte[(int)f.length()];//f.length()返回的是long,改写成int且FileInputStream得到的是字节流,所以要新建一个byte数组
16             fs.read(s);
17             for(byte b:s)
18             {
19                 System.out.println(b);//打印出的结果是文件中内容的ASCII码
20             }
21         }
22         catch (IOException e) {
23             e.printStackTrace();
24         }
25         finally {
26             if(fs!=null)
27             {
28                 try {
29                     fs.close();
30                 }catch(IOException e) {
31                     e.printStackTrace();
32                 }
33             }
34         }
35     }
36 }

使用try()的方法

把流定义在try()里,这个流就会在try-catch-finally结束后自动关闭。所有的流都有一个AutoCloseable接口,实现了这个接口的流都可以在try()中实现并且在try-catch-finally语句结束后自动关闭

例子:

 1 package IO流;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.IOException;
 7 
 8 public class 字节流读取文件 {
 9 
10     public static void main(String[] args) {
11         File f=new File("D://1.txt");
12         try(FileInputStream fs=new FileInputStream(f)) {
13             byte[] s=new byte[(int)f.length()];//f.length()返回的是long,改写成int且FileInputStream得到的是字节流,所以要新建一个byte数组
14             fs.read(s);
15             for(byte b:s)
16             {
17                 System.out.println(b);//打印出的结果是文件中内容的ASCII码
18             }
19         }
20         catch (IOException e) {
21             e.printStackTrace();
22         }
23     }
24 }

 

posted @ 2021-02-08 09:51  _厨师沙拉  阅读(708)  评论(0)    收藏  举报