Java流分类
1.按数据流的方向不同可以分为输入流和输出流
2.按处理数据单位不同可以分为字节流和字符流(一个字符2个字节,UTF-16)
3.按照功能不同可以分为节点流和处理流
节点流和处理流
节点流为可以从一个特定的数据源(节点)读写数据(如:文件、内存)。处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
字节流
继承自InputStream
的流都是用于向程序中输入数据,且数据的单位为字节(8bit)
其包括的节点流有: FileInputStream
、PipedInputStream
、ByteArrayInputStream
、StringBufferInputStream
包括的处理流有:FilterInputStream
、SequenceInputStream
、ObjectInputStream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import java.io.*; public class TestFileInputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null; try { in = new FileInputStream("d:\\workspace\\JAVATest\\src\\cn\\edu\\whut\\io\\TestFileInputStream.java"); } catch (FileNotFoundException e) { System.out.println("找不到指定文件"); System.exit(-1); } try { long num = 0; while((b=in.read())!=-1){ System.out.print((char)b); num++; } in.close(); System.out.println(); System.out.println("共读取了 "+num+" 个字节"); } catch (IOException e1) { System.out.println("文件读取错误"); System.exit(-1); } } }
|
OutputStream
继承自OutputStream
的流是用于从程序中输出数据,且数据的单位为字节。
其包括的节点流为FileOutputStream
、PipedOutputStream
、ByteArrayOutputStream
包括的处理流有:FilterOutputStream
、ObjectOutputStream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import java.io.*; public class TestFileOutputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("d:\\workspace\\JAVATest\\src\\cn\\edu\\whut\\io\\TestFileOutputStream.java"); out = new FileOutputStream("d:\\workspace\\JAVATest\\src\\cn\\edu\\whut\\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("文件已复制"); } }
|
字符流
Reader
继承自Reader
的流都是用于向程序中输入数据,且数据的单位为字符(16bit)
其包括的节点流有:CharArrayReader
、PipedReader
、StringReader
包括的处理流有:BufferedReader
、InputStreamReader
、FilterReader
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import java.io.*; public class TestFileReader { public static void main(String[] args) { FileReader fr = null; int c = 0; try { fr = new FileReader("d:\\workspace\\JAVATest\\src\\cn\\edu\\whut\\io\\TestFileReader.java"); int ln = 0; while ((c = fr.read()) != -1) { System.out.print((char)c); } fr.close(); } catch (FileNotFoundException e) { System.out.println("找不到指定文件"); } catch (IOException e) { System.out.println("文件读取错误"); } } }
|
Writer
继承自Writer
的流都是用于从程序中输出数据,且数据的单位为字符(16bit)
其包括的节点流有:CharArrayWriter
、PipedWriter
、StringWriter
包括的处理流有:BufferedWriter
、OutputStreamWriter
、FilterWriter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import java.io.*; public class TestFileWriter { public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("d:\\workspace\\JAVATest\\src\\cn\\edu\\whut\\ io\\unicode.dat"); for(int c=0;c<=50000;c++){ fw.write(c); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); System.out.println("文件写入错误"); System.exit(-1); } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import java.io.*; public class TestFileWriter2 { public static void main(String[] args) throws Exception { FileReader fr = new FileReader("d:/java/io/TestFileWriter2.java"); FileWriter fw = new FileWriter("d:/java/io/TestFileWriter2.bak"); int b; while((b = fr.read()) != -1) { fw.write(b); } fr.close(); fw.close(); } }
|
其他
缓冲流
转换流
数据流
Print流
Object流