Java流分类

1.按数据流的方向不同可以分为输入流和输出流
2.按处理数据单位不同可以分为字节流和字符流(一个字符2个字节,UTF-16)
3.按照功能不同可以分为节点流和处理流

节点流和处理流

节点流为可以从一个特定的数据源(节点)读写数据(如:文件、内存)。处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

字节流

InputStream

继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit)
其包括的节点流有: FileInputStreamPipedInputStreamByteArrayInputStreamStringBufferInputStream
包括的处理流有:FilterInputStreamSequenceInputStreamObjectInputStream
InputStream字节输入流

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的流是用于从程序中输出数据,且数据的单位为字节。
其包括的节点流为FileOutputStreamPipedOutputStreamByteArrayOutputStream
包括的处理流有:FilterOutputStreamObjectOutputStream
InputStream字节输入流

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)
其包括的节点流有:CharArrayReaderPipedReaderStringReader
包括的处理流有:BufferedReaderInputStreamReaderFilterReader

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) {
//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("文件读取错误");
}
}
}

Writer

继承自Writer 的流都是用于从程序中输出数据,且数据的单位为字符(16bit)
其包括的节点流有:CharArrayWriterPipedWriterStringWriter
包括的处理流有:BufferedWriterOutputStreamWriterFilterWriter

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流