流(一)
输入/输出流的分类
1 按数据流的方向不同可以分为输入流和输出流
2 按处理数据单位不同可以分为字节流和字符流
3 按照功能不同可以分为节点流和处理流
四种抽象
字节流 |
字符流 | |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
按照功能的分类分为节点流和处理流
节点流:可以从一个特定的数据源(节点)读写数据(如:文件,内存)
处理流:连接在已存在的流(节点流或处理流)之上。(管子上再套一个管子)
InputStream
从流中读取数据,且数据的单位为字节(8bit)
InputStream的基本方法
OutputStream
输出数据,且数据的单位为字节(8bit)
基本方法
Reader
读数据,数据的单位是字符(16bit)
Writer
写数据,且数据的单位是字符(16bit)
节点流类型
类型 | 字符流 | 字节流 |
File |
FileReader FileWriter |
FileInputStream FileOutputStream |
Memory Array |
CharArrayReader CharArrayWriter |
ByteArrayInputStream ByteArrayOutputStream |
Memory String |
StringReader StringWriter |
|
Pipe 管道 |
PipedReader PipedWriter |
PipedInputStream PipedOutputStream |
测试样例
FileInputStream读取文件&FileOutputStream写入文件
import java.io.*;
public class TestFileInputStream {
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;
try {
in = new FileInputStream("d:\\HelloWorld.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("ERROR");
System.exit(-1);
}
}
}
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:/HelloWorld.java"); //这个文件必须实现存在
out = new FileOutputStream("d:/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("文件已复制");
}
}
FileReader & FileWriter
import java.io.*;
public class TestFileReader {
public static void main(String[] args) {
FileReader fr = null;
int c = 0;
try {
fr = new FileReader("d:/HelloWorld.java");
int ln = 0;
while((c = fr.read())!=-1) {
System.out.println((char)c);
}
fr.close();
}catch(FileNotFoundException e1) {
System.out.println("找不到文件");
}catch(IOException e2) {
System.out.println("文件读取错误");
}
}
}
import java.io.*;
public class TestFileWriter {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("d:/unicode.txt"); //保证路径正确,文件会自动创建
for(int c = 0; c <= 5000; c++) {
fw.write((char)c);
}
fw.close();
}catch(IOException e1) {
e1.printStackTrace();
System.out.println("文件读写错误");
System.exit(-1);
}
}
}