一、字节流
应用场景:视频、音频等文件时以字节的形式进行读写,字节是给计算机看的。
FileInputStream和FileOutputStream和外部文件共同构成输入输出流,可以从文件中读取字节或者向文件中写入字节。BufferedInputStream和BufferedOutputStream是缓冲数据流,它们预先把字节流读入内存缓存区而达到减少读写IO设备的次数而加快输入输出流的速度。
File file = new File("d://stream.txt"); -> 通过路径创建文件
if(!file.exists()){ -> 文件是否存在
file.createNewFile(); -> 不存在时创建新的文件
}
OutputStream outputStream = new FileOutputStream(file,false); -> 创建覆盖 字节输出流
outputStream.write("I am outputStream".getBytes()); -> 输出并覆盖原有字节
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
bufferedOutputStream.write("\n".getBytes());
bufferedOutputStream.write("I am bufferedOutputStream".getBytes());
bufferedOutputStream.close(); -> 关闭字节输出流释放资源
outputStream.close(); -> 关闭字节输出流释放资源
byte[] bytes = new byte[1024]; -> 创建字节数组
InputStream inputStream = new FileInputStream(file); -> 创建字节输入流
inputStream.read(bytes); -> 将字节读入数组
System.out.println(new String(bytes)); -> 将字节转换成字符串并输出
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
bufferedInputStream.read(bytes); -> 将字节读入数组
System.out.println(new String(bytes)); -> 将字节转换成字符串并输出
bufferedInputStream.close(); -> 关闭字节输入流释放资源
inputStream.close(); -> 关闭字节输入流释放资源
二、字符流
应用场景:读写数据类型为字符的信息,字符是给工程师看的。
FileReader和FileWriter和外部文件共同构成输入输出流,可以从文件中读取字符或者向文件中写入字符。BufferedReader和BufferedWriter是缓冲数据流,它们预先把字符流读入内存缓存区而达到减少读写IO设备的次数而加快输入输出流的速度。
File file = new File("d://","stream.txt"); -> 通过路径创建文件
if(!file.exists()){ -> 文件是否存在
file.createNewFile(); -> 不存在时创建新的文件
}
Writer writer = new FileWriter(file,true); -> 创建追加字符输出流
writer.write("\n"); -> 换行
writer.write("I am writer"); -> 将字符写入缓存中
writer.flush(); -> 将缓存中的字符刷新到文件中
BufferedWriter bufferedWriter = new BufferedWriter(writer); -> 创建缓冲输出流
bufferedWriter.newLine(); -> 换行
bufferedWriter.write("I am bufferedWriter"); -> 将字符写入缓存中
bufferedWriter.flush(); -> 将缓存中的字符刷新到文件中
bufferedWriter.close(); -> 关闭字符输出流释放资源
writer.close(); -> 关闭字符输出流释放资源
char[] chars = new char[1024]; -> 创建字符数组
Reader reader = new FileReader(file); -> 创建字符输入流
reader.read(chars); -> 将字符读入数组
System.out.println(new String(chars)); -> 将字符数组转换成字符串并输出
BufferedReader bufferedReader = new BufferedReader(reader); -> 创建缓冲输入流
String line;
while ((line = bufferedReader.readLine()) != null){ -> 读行
System.out.println(line);
}
bufferedReader.close(); -> 关闭字符输入流释放资源
reader.close(); -> 关闭字符输入流释放资源
三、IO流的族谱
![](https://img.haomeiwen.com/i8201342/97c52ec6c0e26bbd.jpg)
四、实战
- 压缩文件
public static void compress(String input, String output) throws Exception {
File file = new File(input);
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(output));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(zipOutputStream);
recursion(zipOutputStream,bufferedOutputStream,file);
bufferedOutputStream.close();
zipOutputStream.close();
}
public static void recursion(ZipOutputStream zipOutputStream, BufferedOutputStream bufferedOutputStream, File input) throws Exception {
String name = input.getName();
if (input.isDirectory()) {
File[] files = input.listFiles();
if (files == null) return;
if (files.length == 0) {
zipOutputStream.putNextEntry(new ZipEntry(name + "/"));
} else {
for (File file : files) {
recursion(zipOutputStream,bufferedOutputStream,file);
}
}
}else{
zipOutputStream.putNextEntry(new ZipEntry(name));
FileInputStream fileInputStream = new FileInputStream(input);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
int length;
byte[] bytes = new byte[1024];
while ((length = bufferedInputStream.read(bytes)) != -1){
bufferedOutputStream.write(bytes,0,length);
}
bufferedInputStream.close();
fileInputStream.close();
bufferedOutputStream.flush(); -> 字节刷新到文件
}
}
compress("D:\\test1", "D:\\test2.zip");
- 解压文件
public static void decompression(String input, String output) throws Exception {
File file = new File(input);
if(!file.exists()) return;
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null){
if(entry.isDirectory()) return;
File document = new File(output,entry.getName());
File folder = new File(document.getParent());
if(!folder.exists()) folder.mkdirs();
FileOutputStream fileOutputStream = new FileOutputStream(document);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
int length;
byte[] bytes = new byte[1024];
while ((length = zipInputStream.read(bytes)) != -1){
bufferedOutputStream.write(bytes,0,length);
}
bufferedOutputStream.close();
fileOutputStream.close();
}
}
decompression("D:\\test2.zip", "D:\\test3");
网友评论