按流向分:
输入流: 从文件中读取数据到程序
输出流: 从程序向文件中写入数据
按数据传输单位分:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流,在不同编码中,一个字符等于不同的字节数(ASCII码:一个中文汉字占两个字节。UTF-8编码中一个中文(含繁体)等于三个字节。)
按功能分:
节点流: 用于直接操作目标设备的流
过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能
JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类:
InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。
inputstream及其子类
(1)fileinputstream
public static void main(String[] args) throws IOException {
File file= new File("E:/IDEAproject/test.txt");
FileInputStream text=new FileInputStream(file);
byte [] a=new byte[100];
text.read(a,1,10);//从文件的第一个位置开始,读10个,放到a数组
for (int i=0;i<8;i++)
{
System.out.println(a[i]);
}
text.close();
}
outputstream及其子类
(1)fileoutputstream
public static void main(String[] args) throws IOException {
File file= new File("E:/IDEAproject/test.txt");
FileOutputStream out=new FileOutputStream(file,true);//true表示在原文件后面追加内容false表示覆盖
byte [] a={'1','2','3','4','5','5','6','a','s','d','w'};
out.write(a,0,10);
out.close();
}
}
2)用fileinputstream和fileoutputstream完成文件的复制,因为是字节所以什么文件都可以复制(
public static void main(String[] args) throws IOException {
File file2= new File("E:\\IDEAproject\\1.png");
FileInputStream in =new FileInputStream(file2);
File file= new File("E:\\IDEAproject\\2.png");
FileOutputStream out=new FileOutputStream(file);//true表示在原文件后面追加内容false表示覆盖
int value=in.read();
while( value!=-1)
{
out.write(value);
out.flush();
value = in.read();
}
in.close();
out.close();
}
}