美文网首页
Java IO流详解

Java IO流详解

作者: 潜心之力 | 来源:发表于2020-05-03 14:53 被阅读0次

一、字节流

应用场景:视频、音频等文件时以字节的形式进行读写,字节是给计算机看的。
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流的族谱

stream

四、实战

  • 压缩文件
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");

相关文章

  • Java之IO流详解

    title: Java之IO流详解tags: Java IO流categories: Java IO流 大多数应用...

  • 2018-04-25

    java.io(Input/Output)使用详解 目录1、流(Stream)2、流的分类3、java.io包下的...

  • Java IO流详解(一)——预备知识

    Java IO流详解(一)——预备知识 一、字符与字节 在Java中有输入、输出两种IO流,每种输入、输出流又分为...

  • Java IO流详解

    一、字节流 应用场景:视频、音频等文件时以字节的形式进行读写,字节是给计算机看的。FileInputStream和...

  • Java IO 流详解

    Java Io 类图结构 命名特点: 字节流:读写的都是字节。输入流:[xxx]InputStream输出流:[x...

  • Java之IO流详解

    大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,...

  • 从0开始复习java(9)--IO

    Java的io通过java.io包下的类和接口支持。主要有输入、输出流,又分为字节流和字符流。Java的io流使用...

  • Java IO流详解(三)——RandomAccessFile

    本篇文章主要介绍RandomAccessFile,该类是IO流体系中功能最丰富的文件内容访问类,既可以读取文件内容...

  • java IO流详解及特性

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流。 流是一组有顺序的,有起点和终点的字节集合,是...

  • Java IO流详解(二)——IO流的框架体系

    一、IO流的概念 Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同...

网友评论

      本文标题:Java IO流详解

      本文链接:https://www.haomeiwen.com/subject/irwkghtx.html