IO流---文件字节流,字符流,文件拷贝

时间:2022-08-08 21:35:04

字节流操作四大步骤:

1,创建源

2,选择流

3,执行操作

4,通知关闭资源

 

FileInPutStream类:字节输入流

从文件中读入信息:

 1 package cn.ftf.io;  2 
 3 import java.io.FileInputStream;  4 import java.io.FileNotFoundException;  5 import java.io.FileOutputStream;  6 import java.io.IOException;  7 import java.io.InputStream;  8 import java.io.OutputStream;  9 
10 /**
11  * 四个步骤,分段读取 12  * 1.创建源 13  * 2,选择流 14  * 3,操作 15  * 4,释放资源 16  * 17  * @author 房廷飞 18  */
19  
20  
21 public class TestIO05 { 22     public static void main(String[] args) { 23     //创建源
24         File src=new File("D:\\myjavacode\\JavaPractise01\\src\\cn\\ftf\\io\\abc.txt"); 25         InputStream is = null; 为了方便关闭流,都是这样写的 26         try {      //try-catch处理异常,都是这样
27             is=new FileInputStream(src);     //实例化字节流对象
28             byte[]flush=new byte[1024];  //做一个数组,做缓冲容器,提高效率,数组容量是一次读取的字节数量
29             int len=-1;    //用于接收字节长度
30             while((len=is.read(flush))!=-1) {    //.read(字节数组),读一定的长度,可查api文档
31                 String str=new String(flush,0,len);    //解码,由字符数组构建字符串
32  System.out.println(str); 33  } 34             
35         } catch (FileNotFoundException e) { 36             // TODO Auto-generated catch block
37  e.printStackTrace(); 38         } catch (IOException e) { 39             // TODO Auto-generated catch block
40  e.printStackTrace(); 41         }finally {        //关闭字节流,都是这样写的
42             try { 43                 if(null!=is) { 44  is.close(); 45  } 46             } catch (IOException e) { 47                 // TODO Auto-generated catch block
48  e.printStackTrace(); 49  } 50  } 51  } 52 }

 

 

字节输出流:FileOutputStream

将信息写到文件

 1 package cn.ftf.io;  2 
 3 import java.io.File;  4 import java.io.FileNotFoundException;  5 import java.io.FileOutputStream;  6 import java.io.IOException;  7 import java.io.OutputStream;  8 
 9 //一切四步骤:1,创建源2,选择流3,操作4,释放资源
10 
11 public class TestIO05{ 12     public static void main(String[] args) { 13         //创建源
14         File file=new File("D:\\myjavacode\\JavaPractise01\\src\\cn\\ftf\\io\\test002.txt"); 15          //选择流
16         OutputStream os=null; 17         
18         //操作
19         try { 20             os=new FileOutputStream(file,true);  //实例化输出流对象,//默认是刷新写,跟写的话加true (file,true)
21             String msg="hello 房廷飞!!!"; 22             byte[] bt= msg.getBytes();  //编码,将字符串转化为字节数组,可查api文档查到
23             try { 24                 os.write(bt);    // 将字节数组写入文件
25                 os.flush();     //写完清空缓存,养成习惯,都这样写的
26             } catch (IOException e) { 27                 // TODO Auto-generated catch block
28  e.printStackTrace(); 29  } 30             } catch (FileNotFoundException e) { 31             // TODO Auto-generated catch block
32  e.printStackTrace(); 33             
34  } 35         finally {    //通知关闭资源,标准格式
36             try { 37             if(os!=null) { 38  os.close(); 39  } 40                 }catch (IOException e) { 41                     // TODO Auto-generated catch block
42  e.printStackTrace(); 43  } 44  } 45  } 46 }

文件拷贝:字节输入流,输出流合二为一

 1 package cn.ftf.io;  2 
 3 import java.io.File;  4 import java.io.FileInputStream;  5 import java.io.FileNotFoundException;  6 import java.io.FileOutputStream;  7 import java.io.IOException;  8 import java.io.InputStream;  9 import java.io.OutputStream; 10 
11 public class CopyFile { 12     
13     public static void main(String[] args) { 14         copyFile("D:/myjavacode/JavaPractise01/src/cn/ftf/io/abc.txt","C:/Users/user/Desktop/hello.py"); 15  } 16     public static void copyFile(String first,String second) { 17         //1,创建源
18         File file1=new File(first); 19         File file2=new File(second); 20         //2,选择流
21         InputStream str1=null; 22         OutputStream str2=null; 23         
24         //3,执行操作
25         try { 26             str1=new FileInputStream(file1); 27             str2=new FileOutputStream(file2); 28             byte[] flush=new byte[1024]; 29             try { 30                 while(str1.read(flush)!=-1) { 31  str2.write(flush); 32  str2.flush(); 33  } 34             } catch (IOException e) { 35                 // TODO Auto-generated catch block
36  e.printStackTrace(); 37  } 38         } catch (FileNotFoundException e) { 39             // TODO Auto-generated catch block
40  e.printStackTrace(); 41  } 42         //4,关闭资源 //分别关闭,先打打开的后关闭
43         if(str2!=null) { 44             try { 45  str2.close(); 46             } catch (IOException e) { 47                 // TODO Auto-generated catch block
48  e.printStackTrace(); 49  } 50  } 51         if(str1!=null) { 52             try { 53  str1.close(); 54             } catch (IOException e) { 55                 // TODO Auto-generated catch block
56  e.printStackTrace(); 57  } 58  } 59  } 60 }

 至于字符流也是大同小异,同样是标准四步骤,直接由字节流就可以改写来。

由字节流拷贝文件改写为字符流拷贝文本文件:

 1 package cn.ftf.io;  2 /**
 3  * 字节流和字符流大同小异  4  * 在copyfile的例子下改写成copytext,字节流改写成字符流  5  */
 6 import java.io.File;  7 import java.io.FileNotFoundException;  8 import java.io.FileReader;  9 import java.io.FileWriter; 10 import java.io.IOException; 11 import java.io.Reader; 12 import java.io.Writer; 13 
14 public class CopyText { 15     
16     public static void main(String[] args) { 17         copyFile("D:/myjavacode/JavaPractise01/src/cn/ftf/io/abc.txt","C:/Users/user/Desktop/hello.txt"); 18  } 19     public static void copyFile(String first,String second) { 20         //1,创建源
21         File file1=new File(first); 22         File file2=new File(second); 23         //2,选择流
24         Reader str1=null; 25         Writer str2=null; 26         
27         //3,执行操作
28         try { 29             str1=new FileReader(file1); 30             try { 31                 str2=new FileWriter(file2); 32             } catch (IOException e1) { 33                 // TODO Auto-generated catch block
34  e1.printStackTrace(); 35  } 36             char[] flush=new char[1024]; 37             try { 38                 while(str1.read(flush)!=-1) { 39  str2.write(flush); 40  str2.flush(); 41  } 42                 String msg="hello ftf!!!"; 43  str2.append(msg); 44             } catch (IOException e) { 45                 // TODO Auto-generated catch block
46  e.printStackTrace(); 47  } 48         } catch (FileNotFoundException e) { 49             // TODO Auto-generated catch block
50  e.printStackTrace(); 51  } 52         //4,关闭资源 //分别关闭,先打打开的后关闭
53         if(str2!=null) { 54             try { 55  str2.close(); 56             } catch (IOException e) { 57                 // TODO Auto-generated catch block
58  e.printStackTrace(); 59  } 60  } 61         if(str1!=null) { 62             try { 63  str1.close(); 64             } catch (IOException e) { 65                 // TODO Auto-generated catch block
66  e.printStackTrace(); 67  } 68  } 69  } 70 }