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 }

浙公网安备 33010602011771号