Java - Java IO 简介

1. 概述

  1. 面试偶尔会问到让你写 文件读写 的面试官
    1. 我搞不懂为啥必须会这玩意
    2. 面试官的意思是, 这玩意只要是个开发就得会
    3. 当然我现在又不是开发

2. 环境

  1. 语言
    1. java 1.8

3. 准备

  1. 概述
    1. 基本概念
  2. 场景
    1. 一次读一行
    2. 读取指定编码
  3. 文件(File 对象)
    1. 概述
      1. 读写的目标
    2. 其他
      1. 要读的文件, 需要存在
      2. 通常不要针对同一个文件做读写
      3. 注意目录的 权限
  4. 输入
    1. 概述
      1. 就是读
      2. 多层嵌套
    2. FileInputStream
      1. 概述
        1. 文件输入流
        2. 需要 文件对象 来确定输入
    3. InputStreamReader
      1. 概述
        1. 重要参数
          1. 编码
    4. BufferedReader
      1. 概述
        1. 缓存读取效率较高
        2. 可以使用 readline 方法读取一行
  5. 输出
    1. 概述
      1. 写文件
      2. 也是多层嵌套
    2. FileOutputStream
      1. 概述
        1. 文件输出流
        2. 需要 文件对象
    3. OutputStreamWriter
      1. 概述
      1. 确定编码

    4. BufferedWriter
      1. 概述
      1. 可以缓存写

4. 示例代码

// 注意: 这里只给出思路, 文件类, 输入输出流可能会遇到异常, 需要 try catch 或者 throws, 并且这些东西, 最好在 finally 里清空和关闭

// 声明变量: 读
// inputPath 是 String 类型的变量, 记录着 输入文件 在文件系统里的位置
File inputFile = new File(inputPath);
FileInputStream fis = new FileInputStream(inputFile);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(fis);
// 下面是简化版本
// BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile),"UTF-8"));
// 如果不需要调整编码, 也可以这么写
// BufferedReader br = new BufferedReader(new FileReader(inputFile)));

// 声明变量: 写
File outputFile = new File(outputPath);
FileOutputStream fos = new FileOutputStream(outputFile);
OutputStreamWriter osr = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(fos);
// 下面是简化版本
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile),"UTF-8"));
// 如果不需要调整编码, 也可以这么写
// BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile)));


//读取数据
//循环取出数据
String str = null;
while ((str = br.readLine()) != null) {
System.out.println(str);
//写入相关文件
bw.write(str);
bw.newLine();
}

//清楚缓存
bw.flush();

//关闭流
br.close();
bw.close();

4. 其他

  1. ref
    1. 写的很清晰, 很详细
    https://www.cnblogs.com/ll409546297/p/7197911.html
  2. 其他的读写场景
    1. 不需要关注编码的读写
    2. 每次读写固定 字符/字节 的场景
    3. randomaccessfile 场景
  3. 关于 Java 的 IO
    1. 这种管道套管道的方法, 真的让人难受
    2. 有空可以了解下 python 的 io, 简单的令人窒息
  4. 最后的 shutdown 处理
    1. bw 需要一波输出
      1. 可能会有剩余内容
    2. 流的关闭
      1. 只用关闭最顶层的对象即可
        1. 下面的会自己关闭

猜你喜欢

转载自www.cnblogs.com/xy14/p/11109215.html