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文件。