Java当中的IO(二)

1. 大文件的读写方法

2. 字符流的使用方法

 

1. 大文件的读写方法

       buffer大小总有个尽头

       假如1G = 1024 * 1024 * 1024 byte 不可能产生这么大的buffer吧

       因此应该循环读取数据, 一次读写一小段

       右键-属性-from.txt有2345kb, 每次读取1024kb时, 3次即可读完

 1 import java.io.*;
 2 
 3 class Test{
 4     public static void main(String args []){
 5         FileInputStream fis = null ;
 6         FileOutputStream fos = null ; 
 7         try{
 8             fis = new FileInputStream("e:/Java/src/IO2/from.txt");   //这一句可能会异常
 9             fos = new FileOutputStream("e:/Java/src/IO2/to.txt"); 
10             byte [] buffer = new byte[1024];
11             while(true){
12                 int temp = fis.read(buffer,0,buffer.length);
13                 if(temp == -1) {  //temp=-1表示文件已经读完
14                     break;  
15                 }
16                 fos.write(buffer,0,temp);
17             }        
18         }
19         catch(Exception e){
20             System.out.println(e);
21         }
22     }
23 }

            

        fis = new FileInputStream("e:/Java/src/IO2/from.txt");   
        fos = new FileOutputStream("e:/Java/src/IO2/to.txt");       

            上面两行代码, 相当于在from.txt 和 to.txt上插上了两根管子, 输入输出流通过管道传输

            但是用完之后需要关掉管子, 故在catch后面加上fianlly来关掉

             1 finally{ 2 fis.close(); 3 fos.close(); 4 } 

     编译后发现报错, 因为close本身也可能异常, 故需改如下

 1 import java.io.*;
 2 
 3 class Test{
 4     public static void main(String args []){
 5         FileInputStream fis = null ;
 6         FileOutputStream fos = null ; 
 7         try{
 8             fis = new FileInputStream("e:/Java/src/IO2/from.txt");   //这一句可能会异常
 9             fos = new FileOutputStream("e:/Java/src/IO2/to.txt"); 
10             byte [] buffer = new byte[1024];
11             while(true){
12                 int temp = fis.read(buffer,0,buffer.length);
13                 if(temp == -1) {  //temp=-1表示文件已经读完
14                     break;  
15                 }
16                 fos.write(buffer,0,temp);
17             }        
18         }
19         catch(Exception e){
20             System.out.println(e);
21         }
22         finally{
23             try{
24                 fis.close();
25                 fos.close();
26             }    
27             catch(Exception e){
28                 System.out.println(e);
29             }
30         }
31     }
32 }

 

 

2. 字符流的使用方法

        上面都是以字节读取

        字符流, 读文件时以字符为基础

        字节输入流:Reader  <- FileReader

                         int read(char [] c, int off , int len)

        字节输出流:Writer  <- FileWriter                        

                         void write(char [] c, int off , int len)

 1 import java.io.*;
 2 
 3 class TestChar{
 4     public static void main(String args []){
 5         FileReader fr = null ;
 6         FileWriter fw = null ; 
 7         try{
 8             fr = new FileReader("e:/Java/src/IO21/from.txt");   //这一句可能会异常
 9             fw = new FileWriter("e:/Java/src/IO21/to.txt"); 
10             char [] buffer = new char[100];
11             int temp = fr.read(buffer , 0 , buffer.length);
12             for(int i = 0 ; i < buffer.length; i++)
13             {
14                 System.out.println(buffer[i]);
15             }
16         }
17         catch(Exception e){
18             System.out.println(e);
19         }
20     }
21 }

        打印出来abcde后面全是空字符

      

 1 import java.io.*;
 2 
 3 class TestChar{
 4     public static void main(String args []){
 5         FileReader fr = null ;
 6         FileWriter fw = null ; 
 7         try{
 8             fr = new FileReader("e:/Java/src/IO21/from.txt");   //这一句可能会异常
 9             fw = new FileWriter("e:/Java/src/IO21/to.txt"); 
10             char [] buffer = new char[100];
11             int temp = fr.read(buffer , 0 , buffer.length);
12             fw.write(buffer,0,temp);
13         }
14         catch(Exception e){
15             System.out.println(e);
16         }
17         finally{
18             try{
19                 fr.close();
20                 fw.close();
21             }    
22             catch(Exception e){
23                 System.out.println(e);
24             }
25         }
26     }
27 }

 

 

posted @ 2014-05-21 13:53  Mirrorhanman  阅读(210)  评论(0编辑  收藏  举报