1、流的分类(所有流均位于java.io包内):
注:这里的输入输出是相对于内存而言的,从文件读取是将文件内容读到内存中,因此对于内存而言就是input;同样向文件写内容,是将内存中的内容写入文件,因此相对于内存而言就是output。
按照功能不同还可以分为节点流和处理流
节点流:从数据源直接读取数据(文件、内存)
处理流:从其他流(节点流或处理流)获得数据,以便对数据进行进一步处理,为程序提供更大的读写功能
2、InputStream类(深色为节点流,浅色为处理流)
3、OutputStream类(深色为节点流,浅色为处理流)
4、Reader类(深色为节点流,浅色为处理流),注意这是字符流,每次读取一个字符(2个字节)
5、Writer类(深色为节点流,浅色为处理流),同样是字符流
6、一些重要的节点流
7、一些重要的处理流
注:
关于IO的一个小程序
import java.io.*;
public class TestFileInputStream{
public static void main(String []args){
FileInputStream fs=null;
FileOutputStream fo=null;
int b=0;
try{
fs=new FileInputStream("d:/java/File/TestFileInputStream.java");
fo=new FileOutputStream("d:/java/File/copy.java");
}catch(FileNotFoundException e){
e.printStackTrace();
}
try{
while((b=fs.read())!=-1){
System.out.print((char)b);
fo.write(b);
}
fs.close();
fo.close();
}catch(IOException e){
System.out.println("读取文件错误");
}
}
}
该程序的功能是将文件自身读取打印并复制写到copy.java文件中
(1)出现一种情况:
在文件打印的时候,文件里面的“读取文件错误”这段中文打印为乱码,这可以理解,因为我是用字节流读取的,每次读取一个字节并打印,当然不能正确打印中文(一个中文两个字节)。
但是,将文件复制后的copy.java文件确实正确的复制过来的,包括正确的中文,到网上查询资料,解释如下:
字节流的复制并没有经过解码-编码这个过程,复制过去的就是原来的文件;复制过程中,一个汉字的确是被拆成两个字节来复制,但是在用编辑器打开时,编辑器会识别出这两个相邻的字节就是一个汉字,从而能够正确读取出来。
(2)要想读取出正确的中文,可以用字符流比如InputStreamReader,如下:
import java.io.*;
public class TestFileInputStream{
public static void main(String []args){
FileInputStream fs=null;
InputStreamReader fsr=null;
FileOutputStream fo=null;
int b=0;
try{
fs=new FileInputStream("d:/java/File/TestFileInputStream.java");
fsr=new InputStreamReader(fs);
}catch(FileNotFoundException e){
e.printStackTrace();
}
try{
while((b=fsr.read())!=-1){
System.out.print((char)b);
}
fs.close();
}catch(IOException e){
System.out.println("读取文件错误");
}
}
}