java中的流IO

java中的流IO

 输入/输出流的分类:

java.io

Class InputStream

java.io

Class OutputStream

java.io

Class Reader

java.io

Class Writer

 

节点流类型(以Reader/Writer结尾的都是字符,以Stream结尾的都是字节):


 

测试FileInputStream类

java.io

Class FileInputStream

TestFileInputStream.java

import java.io.*;

/*
	测试FileInputStream,文件输入流。
*/
public class TestFileInputStream {
  public static void main(String[] args) {
    int b = 0;
    FileInputStream in = null;
    try {
      in = new FileInputStream("F:\\java\\io\\TestFileInputStream.java");
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件"); 
      System.exit(-1);//退出系统
    }
    
    try {
	  //读了多少个字节
      long num = 0;
	  //read读出一个字节,!=-1代表还没有读到结尾
      while((b=in.read())!=-1){
		//将b强制转换为char类型,打印出来
        System.out.print((char)b); 
        num++;
      }
	  //关闭
      in.close();  
	  //换行
      System.out.println();
      System.out.println("共读取了 "+num+" 个字节");
    } catch (IOException e1) {
      System.out.println("文件读取错误"); System.exit(-1);
    }
  }
}

 

F:\java\io>javac TestFileInputStream.java

F:\java\io>java TestFileInputStream
import java.io.*;

/*
        ????FileInputStream???????????÷??
*/
public class TestFileInputStream {
  public static void main(String[] args) {
    int b = 0;
    FileInputStream in = null;
    try {
      in = new FileInputStream("F:\\java\\io\\TestFileInputStream.java");
    } catch (FileNotFoundException e) {
      System.out.println("?????????¨????");
      System.exit(-1);//????????
    }

    try {
          //?????à????×???
      long num = 0;
          //read????????×?????!=-1?ú±í???????????á??
      while((b=in.read())!=-1){
                //??b????×?????char?à?????ò??????
        System.out.print((char)b);
        num++;
      }
          //??±?
      in.close();
          //????
      System.out.println();
      System.out.println("???????? "+num+" ??×???");
    } catch (IOException e1) {
      System.out.println("?????????í?ó"); System.exit(-1);
    }
  }
}
共读取了 876 个字节

F:\java\io>

 上面出现好多个????的原因是汉字占两个字节,将占两个字节的汉字强制转为一个字节,无法识别。

 

测试文件输出流,FileOutputStream

java.io

Class FilterOutputStream

TestFileOutputStream.java

import java.io.*;

/*
	测试文件输出流,FileOutputStream
	复制文件的内容
*/
public class TestFileOutputStream {
  public static void main(String[] args) {
	  int b = 0;
	  FileInputStream in = null;
	  FileOutputStream out = null;
	  try {
		//从这个文件往外读数据
	    in = new FileInputStream("F:/java/io/HelloWorld.java");
		//输出的文件
	    out = new FileOutputStream("F:/java/io/HW.java");
	    while((b=in.read())!=-1){
		  //将读到的文件写入输出的文件中
	      out.write(b);
	    }
	    in.close(); 
	    out.close();
	  } catch (FileNotFoundException e2) {
	    System.out.println("找不到指定文件"); 
		System.exit(-1);
	  } catch (IOException e1) {
	    System.out.println("文件复制错误"); 
		System.exit(-1);
	  }
	  System.out.println("文件已复制");
  }
}
F:\java\io>javac TestFileOutputStream.java

F:\java\io>java TestFileOutputStream
文件已复制

F:\java\io>

 找到HelloWorld.java和HW.java,发现文件的内容一样。复制成功。

 

 测试

java.io

Class FileReader

TestFileReader.java

import java.io.*;

/*
	通过字符流的形式读取文件FileReader
*/
public class TestFileReader {
  public static void main(String[] args) {
    FileReader fr = null; 
    int c = 0;
    try {
      fr = new FileReader("F:\\java\\io\\TestFileReader.java");
      int ln = 0;
      while ((c = fr.read()) != -1) {
        //char ch = (char) fr.read();
        System.out.print((char)c);
        //if (++ln >= 100) { System.out.println(); ln = 0;}
      }
      fr.close();
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件");
    } catch (IOException e) {
      System.out.println("文件读取错误");
    }

  }
}
F:\java\io>javac TestFileReader.java

F:\java\io>java TestFileReader
import java.io.*;

/*
        通过字符流的形式读取文件FileReader
*/
public class TestFileReader {
  public static void main(String[] args) {
    FileReader fr = null;
    int c = 0;
    try {
      fr = new FileReader("F:\\java\\io\\TestFileReader.java");
      int ln = 0;
      while ((c = fr.read()) != -1) {
        //char ch = (char) fr.read();
        System.out.print((char)c);
        //if (++ln >= 100) { System.out.println(); ln = 0;}
      }
      fr.close();
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件");
    } catch (IOException e) {
      System.out.println("文件读取错误");
    }

  }
}
F:\java\io>

 中文没有乱码。

测试

java.io

Class FileWriter

 TestFileWriter.java

import java.io.*;

/*
	通过字符流写入文件
*/
public class TestFileWriter {
  public static void main(String[] args) {
    FileWriter fw = null;
    try {
	  //创建unicode.dat文件
      fw = new FileWriter("F:\\java\\io\\unicode.dat");
      for(int c=0;c<=50000;c++){
		//写入unicode编码的前5000个字符
        fw.write(c);
      }
      fw.close();
    } catch (IOException e1) {
    	e1.printStackTrace();
      System.out.println("文件写入错误");
      System.exit(-1);
    }
  }
}

 

F:\java\io>javac TestFileWriter.java

F:\java\io>java TestFileWriter

F:\java\io>

 在相应文件目录上会存在unicode.dat文件。

 

 

 

 

猜你喜欢

转载自mfcfine.iteye.com/blog/2384645