1、 IO流用来处理设备之间的数据传输
a) 上传文件
b) 下载文件
2、 Java对数据的操作都是通过流的方式
3、 Java 用于操作流的对象都在IO包中
4、 IO流分类
a) 流向
i. 输入流:程序读取数据
ii. 输出流:程序向硬盘写入数据
b) 数据类型
i. 字节流:
1. 字节输入流 读数据 InputStream
2. 字节输出流 写数据 OutPutStream
ii. 字符流:为了方便操作文本数据
1. 字符输入流 读数据 Reader
2. 字符输出流 写数据 Writer
c) 默认按照数据类型进行分类。
5、基本流和高级流
基本流:可以直接操作文件的
FileInputStream
FileOutputStream
FileReader
FileWriter
…………
高级流:在基本流基础上提供一些其他功能
其中PrintStream、PrintStream既是基本流又是高级流
6、 总结
a) 字符流复制数据5种方式:
i. 字符缓冲区每次复制一个字符数组
ii. 字符缓冲区每次复制一个字符
iii. 每次复制一个字符数组
iv. 每次复制一个字符
v. 每次复制一行数据
b) 字节流复制数据的4种方式
i. 字节缓冲区每次复制一个字节数组
ii. 字节缓冲区每次复制一个字节
iii. 每次复制一个字节数组
iv. 每次复制一个字节
复制文件
publicclass CopyFileTest {
publicstaticvoid main(String[] args) throws IOException {
//1,明确源和目的。
File srcFile = new File("c:\\YesDir\test.JPG");
File destFile = new File("copyTest.JPG");
//2,明确字节流 输入流和源相关联,输出流和目的关联。
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
//3, 使用输入流的读取方法读取字节,并将字节写入到目的中。
int ch = 0;
while((ch=fis.read())!=-1){
fos.write(ch);
}
//4,关闭资源。
fos.close();
fis.close();
}
}
上述代码输入流和输出流之间是通过ch这个变量进行数据交换的。
上述复制文件有个问题,每次都从源文件读取一个,然后在写到指定文件,接着再读取一个字符,然后再写一个,一直这样下去。效率极低
缓冲数组方式复制文件
publicclass CopyFileByBufferTest {
publicstaticvoid main(String[] args) throws IOException {
File srcFile = new File("c:\\YesDir\test.JPG");
File destFile = new File("copyTest.JPG");
// 明确字节流 输入流和源相关联,输出流和目的关联。
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
//定义一个缓冲区。
byte[] buf = newbyte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);// 将数组中的指定长度的数据写入到输出流中。
}
// 关闭资源。
fos.close();
fis.close();
}
}
速度要快
复制文本文件
我们一般用字符流复制文本文件
publicclass CopyTextFileTest {
publicstaticvoid main(String[] args) throws IOException {
copyTextFile();
}
publicstaticvoid copyTextFile() throws IOException {
//1,明确源和目的。
FileReader fr = new FileReader("c:\\cn.txt");
FileWriter fw = new FileWriter("c:\\copy.txt");
//2,为了提高效率。自定义缓冲区数组。字符数组。
char[] buf = newchar[1024];
int len = 0;
while((len=fr.read(buf))!=-1){
fw.write(buf,0,len);
}
/*2,循环读写操作。效率低。
intch = 0;
while((ch=fr.read())!=-1){
fw.write(ch);
}
*/
//3,关闭资源。
fw.close();
fr.close();
}
}