Java的I/O 笔记(2)

 

FileInputStream的练习:

   1:  import java.io.*;
   2:  public class TestFileInputStream {
   3:    public static void main(String[] args) {
   4:      int b = 0;
   5:      FileInputStream in = null;
   6:      try {
   7:        in = new FileInputStream("d:\\share\\java\\io\\TestFileInputStream.java");
   8:      } catch (FileNotFoundException e) {           //如果没有throws语句,则使用try…catch
   9:        System.out.println("找不到指定文件"); 
  10:        System.exit(-1);
  11:      }              
  12:      
  13:      try {
  14:        long num = 0;     //num记录读取的字节数
  15:        while((b=in.read())!=-1){
  16:          System.out.print((char)b); 
  17:          num++;
  18:        }
  19:        in.close();  
  20:        System.out.println();
  21:        System.out.println("共读取了 "+num+" 个字节");
  22:      } catch (IOException e1) {
  23:        System.out.println("文件读取错误"); System.exit(-1);
  24:      }
  25:    }
  26:  }
 
  这段代码是用FileInputStream读取d:\share\java\io\TestFileInputStream.java位置的文件,读取的内容就是以上代码。
由于是字节流,只能一个字节一个字节的读取,所以文件中的汉字都无法读取。
 

FileOutPutStream的练习:

   1:  import java.io.*;
   2:  public class TestFileOutputStream {
   3:    public static void main(String[] args) {
   4:        int b = 0;
   5:        FileInputStream in = null;   //定义流实例in和out,指向null
   6:        FileOutputStream out = null;
   7:        try {
   8:          in = new FileInputStream("d:/share/java/HelloWorld.java");   //将in和out指向具体的文件
   9:          out = new FileOutputStream("d:/share/java/io/HW.java");  如没有此文件,则自动新建
  10:          while((b=in.read())!=-1){
  11:            out.write(b);
  12:          }
  13:          in.close(); 
  14:          out.close();
  15:        } catch (FileNotFoundException e2) {
  16:          System.out.println("找不到指定文件"); System.exit(-1);
  17:        } catch (IOException e1) {
  18:          System.out.println("文件复制错误"); System.exit(-1);
  19:        }
  20:        System.out.println("文件已复制");
  21:    }
  22:  }
 
 
注意:文件地址的写法问题,如果用/的话,要在前面加一个/用来和转义符区别。也可以用\,就不用那么麻烦。转移符里用的是\n,\t之类。
             d:/share/java/HelloWorld.java   
等同于:  d:\\share\\java\\HelloWorld.java

FileReader 练习:

   1:  import java.io.*;
   2:  public class TestFileReader {
   3:    public static void main(String[] args) {
   4:      FileReader fr = null; 
   5:      int c = 0;
   6:      try {
   7:        fr = new FileReader("d:\\share\\java\\io\\TestFileReader.java");
   8:        int ln = 0;
   9:        while ((c = fr.read()) != -1) {
  10:          //char ch = (char) fr.read();
  11:          System.out.print((char)c);
  12:          //if (++ln >= 100) { System.out.println(); ln = 0;}
  13:        }
  14:        fr.close();
  15:      } catch (FileNotFoundException e) {
  16:        System.out.println("找不到指定文件");
  17:      } catch (IOException e) {
  18:        System.out.println("文件读取错误");
  19:      }
  20:   
  21:    }
  22:  }
 

FileWriter 练习:

   1:  import java.io.*;
   2:  public class TestFileWriter {
   3:    public static void main(String[] args) {
   4:      FileWriter fw = null;
   5:      try {
   6:        fw = new FileWriter("d:\\bak\\unicode.dat");
   7:        for(int c=0;c<=50000;c++){
   8:          fw.write(c);
   9:        }
  10:        fw.close();
  11:      } catch (IOException e1) {
  12:          e1.printStackTrace();
  13:        System.out.println("文件写入错误");
  14:        System.exit(-1);
  15:      }
  16:    }
  17:  }
 
 
   1:  import java.io.*;
   2:   
   3:  public class TestFileWriter2 {
   4:      public static void main(String[] args) throws Exception {
   5:          FileReader fr = new FileReader("d:/java/io/TestFileWriter2.java");
   6:          FileWriter fw = new FileWriter("d:/java/io/TestFileWriter2.bak");
   7:          int b;
   8:          while((b = fr.read()) != -1) {
   9:              fw.write(b);
  10:          }
  11:          fr.close();
  12:          fw.close();
  13:      }
  14:  }

 


 
 
缓冲流  要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率。
J2SDK提供了四种缓冲流&构造方法:
BufferedReader ------(Reader in) , (Reader in , int size)       size为自定义缓冲区的大小
BufferedWriter--------(Writer out) , (Writer out , int size)  
BufferedInputStream----(InputStream in ) , (InputStream in , int size)
BufferedOutputStream---(OutputStream out ) , (OutputStream out , int size)
 
观察构造方法的参数,可看成是Buffer套接在Reader,Writer,InputStream,OutputStream外面。
 
   1:  import java.io.*;
   2:  public class TestBufferStream1 {
   3:    public static void main(String[] args) {
   4:      try {
   5:        FileInputStream fis = 
   6:                new FileInputStream("d:\\share\\java\\HelloWorld.java");
   7:        BufferedInputStream bis = 
   8:                new BufferedInputStream(fis);
   9:        int c = 0;
  10:        System.out.println(bis.read());
  11:        System.out.println(bis.read());
  12:        bis.mark(100);
  13:        for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
  14:          System.out.print((char)c+" ");
  15:        }
  16:        System.out.println(); 
  17:        bis.reset();
  18:        for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
  19:          System.out.print((char)c+" ");
  20:        }
  21:        bis.close();
  22:      } catch (IOException e) {e.printStackTrace();}
  23:    }
  24:  }
 
 
   1:  import java.io.*;
   2:  public class TestBufferStream2 {
   3:    public static void main(String[] args) {
   4:      try {
   5:        BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\share\\java\\dat2.txt"));
   6:        BufferedReader br = new BufferedReader(
   7:               new FileReader("d:\\share\\java\\dat2.txt"));
   8:        String s = null;
   9:        for(int i=1;i<=100;i++){
  10:          s = String.valueOf(Math.random());
  11:          bw.write(s);    //将s输出到文件
  12:          bw.newLine();   //写出一个空行
  13:        }
  14:        bw.flush();   // Writer的flush()方法
  15:        while((s=br.readLine())!=null){    //BufferedReader 的readline方法可以一次读取一行text
  16:          System.out.println(s);
  17:        }
  18:        bw.close(); 
  19:        br.close();
  20:      } catch (IOException e) { e.printStackTrace();}
  21:    }
  22:  }
 
 
 
 
 
 
 
posted @ 2012-04-22 15:38  bevin-H  阅读(173)  评论(0编辑  收藏  举报