转载摘自速学堂 IO技术
示例
import java
.io
.*
;
public class TestIO2 {
public static void main(String
[] args
) {
FileInputStream fis
= null
;
try {
fis
= new FileInputStream("d:/a.txt");
StringBuilder sb
= new StringBuilder();
int temp
= 0;
while ((temp
= fis
.read()) != -1) {
sb
.append((char) temp
);
}
System
.out
.println(sb
);
} catch (Exception e
) {
e
.printStackTrace();
} finally {
try {
if (fis
!= null
) {
fis
.close();
}
} catch (IOException e
) {
e
.printStackTrace();
}
}
}
}
结果
部分流
1. InputStream/OutputStream
字节流的抽象类。
2. Reader/Writer
字符流的抽象类。
3. FileInputStream/FileOutputStream
节点流:以字节为单位直接操作“文件”。
4. ByteArrayInputStream/ByteArrayOutputStream
节点流:以字节为单位直接操作“字节数组对象”。
5. ObjectInputStream/ObjectOutputStream
处理流:以字节为单位直接操作“对象”。
6. DataInputStream/DataOutputStream
处理流:以字节为单位直接操作“基本数据类型与字符串类型”。
7. FileReader/FileWriter
节点流:以字符为单位直接操作“文本文件”(注意:只能读写文本文件)。
8. BufferedReader/BufferedWriter
处理流:将Reader/Writer对象进行包装,增加缓存功能,提高读写效率。
9. BufferedInputStream/BufferedOutputStream
处理流:将InputStream/OutputStream对象进行包装,增加缓存功能,提高 读写效率。
10. InputStreamReader/OutputStreamWriter
处理流:将字节流对象转化成字符流对象。
11. PrintStream
处理流:将OutputStream进行包装,可以方便地输出字符,更加灵活。
字符流和字节流
字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。
1、字节流FileInputStream与 FileOutputStream
import java
.io
.FileOutputStream
;
import java
.io
.IOException
;
public class TestFileOutputStream {
public static void main(String
[] args
) {
FileOutputStream fos
= null
;
String string
= "北京尚学堂欢迎您!";
try {
fos
= new FileOutputStream("d:/a.txt", true);
fos
.write(string
.getBytes());
} catch (Exception e
) {
e
.printStackTrace();
} finally {
try {
if (fos
!= null
) {
fos
.close();
}
} catch (IOException e
) {
e
.printStackTrace();
}
}
}
}
2、字符流FileReader与FileWriter
import java
.io
.FileNotFoundException
;
import java
.io
.FileReader
;
import java
.io
.FileWriter
;
import java
.io
.IOException
;
public class TestFileCopy2 {
public static void main(String
[] args
) {
FileReader fr
= null
;
FileWriter fw
= null
;
int len
= 0;
try {
fr
= new FileReader("d:/a.txt");
fw
= new FileWriter("d:/d.txt");
char[] buffer
= new char[1024];
while ((len
= fr
.read(buffer
)) != -1) {
fw
.write(buffer
, 0, len
);
}
} catch (FileNotFoundException e
) {
e
.printStackTrace();
} catch (IOException e
) {
e
.printStackTrace();
} finally {
try {
if (fw
!= null
) {
fw
.close();
}
} catch (IOException e
) {
e
.printStackTrace();
}
try {
if (fr
!= null
) {
fr
.close();
}
} catch (IOException e
) {
e
.printStackTrace();
}
}
}
}
3、缓冲字节流BufferedInputStream和BufferedOutputStream
4、缓冲字符流BufferedReader和BufferedWriter
5、字节数组流ByteArrayInputStream和ByteArrayOutputStream
经常用在需要流和数组之间转化
6、数据流DataInputStream和DataOutputStream
提供了可以存取与机器无关的所有Java基础类型数据(如:int、double、String等)的方法
7、对象流ObjectInputStream/ObjectOutputStream
以“对象”为数据源,但是必须将传输的对象进行序列化与反序列化操作。 把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的反序列化。 (1)ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。 (2)ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
8、转换流InputStreamReader/OutputStreamWriter
用来实现将字节流转化成字符流。