1.IO流
IO流 的本质就是对电脑的文件进行读和写的
输入流:从磁盘读取到内存
输出流:从内存写入到磁盘
在servlet中,response对象获取的输出流,即字节流和字符流互斥,只能使用一个。
原因是response对象只有一个缓冲区,数据都是先到缓冲区,等servlet结束后,缓冲区的数据才会写到客户端。
只有一个缓冲区,只能用于一个字节输出流,或字符输出流。 输入流分为两种:
1.字节输入流 FileInputStream
2.字符输入流
输出流分为两种:
1.字节输出流 FileOutputStream
2.字符输出流
1.1字节输入流
package com.qfedu.a_input;
import java.io.*;
public class Demo1 {
public static void main(String[] args) throws IOException {
File file = new File("C:/aaa/1.txt");
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buf = new byte[1024 * 4];
int length;
while ((length = bis.read(buf)) != -1){
System.out.println(new String(buf, 0 ,length));
}
fis.close();
bis.close();
}
}
BufferedInputStream 其实FileInputStream其实一次读取一个字节的,但是使用BufferedInputStream 了之后,可以搞一个缓冲的数组,一次可以读取多个,那么循环次数就会减少,代码的效率就会提升。
1.2字节输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("目标文件的位置")));
bos.write("写入的内容".getBytes(StandardCharsets.UTF_8));
bos.close();
将一个图片从一个盘符复制到另一个盘符
package com.qfedu.homework;
import java.io.*;
// 自己找一个图片然后进行复制
public class Demo1 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("c:/aaa/1.jpeg")));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("c:/aaa/bbb/2.jpeg")));
byte[] bus = new byte[4 * 1024];
int length;
while((length = bis.read(bus)) != -1) {
bos.write(bus, 0, length);
}
bos.close();
bis.close();
}
}
1.3字符输入输出流【非重点】
FileReader:
String readLine();一次读取一行数据,如果读取到末尾就返回null
是一个阅读字符文件的便利类,是专门处理字符文件的,比如txt文件。音频视频图片
不能使用这个流。
是从字节流到字符流的桥:它读取字节,并使用指定的charset
将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
牵涉到解码,底层是字节流,但是会解码为字符。如果解码失败就意味着咱们读取失败了
一般不会使用字符流操作图片 音频 视频等,因为牵涉到解码。会出问题!!!
开发一般使用字节流!!!
FileWriter
写字符文件一个便利类
newLine();换行
总结:
字节流: 可以处理 文本 图片 音频 视频 字符流: 只能处理文本
例:使用字符流复制一个小说
package com.qfedu.homework;
import java.io.*;
//使用字符流复制一个小说
public class Demo4 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File("c:/aaa/斗破苍穹.txt")));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("c:/aaa/bbb/斗破苍穹字符输出.txt")));
char[] chars = new char[1024 * 4];
int length;
while((length = br.read(chars)) != -1){
bw.write(chars, 0, length);
}
bw.close();
br.close();
}
}