1. 概述

面试偶尔会问到让你写 文件读写 的面试官

我搞不懂为啥必须会这玩意

面试官的意思是, 这玩意只要是个开发就得会

当然我现在又不是开发

一些概念

读与写

参照

以 进行读写行为的程序 作为参照

数据从 外部 进入 程序

数据从 程序 写出到 外部

流 (stream)

传统 IO 是和 流(Stream) 做交互

流是单向的

流对数据操作的单位, 是 字节

inputstream.read() 一次读入一个字节

outputstream.write(), 有多种参数, 但还是以 字节, 或者 字节数组, 在做读写

Reader / Writer

但是有时候的读写, 使用 字符 作为单位, 会更加方便

Reader / Writer 也是单向, 根据名字可以得知

Reader / Writer 操作的单位, 是 字符, 这个就不举例子了

字符编码

这是个蛋疼的问题

Reader / Writer 只能查看, 无法指定编码

需要一个 inputstreamReader / outputStreamWriter 来转换

这个真是蛋疼, 为啥 Reader 和 Writer 就无法直接指定呢

看了 Reader, BufferedReader, FileReader 都没有

于是就有了中间类

InputStreamReader

OutputStreamWriter

思路

只操作字节

inputstream

outputstream

只操作字符, 并且不需要考虑 字符集 问题

reader

writer

需要考虑字符集问题

inputstream, inputstreamreader, reader

ouputstream, outputstreamwriter, writer

后面的示例代码, 就采用这种思路

看了看是挺烦的

其他

randomaccessfile

2. 环境

语言

java 1.8

3. 准备

概述

基本概念

场景

一次读一行

读取指定编码

文件(File 对象)

概述

读写的目标

其他

要读的文件, 需要存在

通常不要针对同一个文件做读写

注意目录的 权限

输入

概述

就是读

多层嵌套

FileInputStream

概述

文件输入流

需要 文件对象 来确定输入

InputStreamReader

概述

重要参数

编码

BufferedReader

概述

缓存读取效率较高

可以使用 readline 方法读取一行

输出

概述

写文件

也是多层嵌套

FileOutputStream

概述

文件输出流

需要 文件对象

OutputStreamWriter

1. 概述

1. 确定编码

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. 其他

ref

写的很清晰, 很详细

https://www.cnblogs.com/ll409546297/p/7197911.html

并发编程网: Java IO 教程, 是原作是老外写的, 他们翻译的不差, 比 TIJ 好懂, 循序渐进.http://ifeve.com/java-io/

其他的读写场景

不需要关注编码的读写

每次读写固定 字符/字节 的场景

randomaccessfile 场景

关于 Java 的 IO

这种管道套管道的方法, 真的让人难受

有空可以了解下 python 的 io, 简单的令人窒息

最后的 shutdown 处理

bw 需要一波输出

可能会有剩余内容

流的关闭

只用关闭最顶层的对象即可

下面的会自己关闭

轩辕Java_Java - Java IO 示例相关推荐

  1. Java FileNameFilter示例

    Java FilenameFilter interface can be implemented to filter file names when File class listFiles() me ...

  2. java io教学文件_通过代码实例跟我学Java语言程序设计及应用技术——Java文件IO技术及应用相关的教学示例(第3部分)...

    1.1Java文件IO技术及应用相关的教学示例(第3部分) 1.1.1文本字符流IO操作 1.字符流Reader/Writer类 提供的对字符流处理的类,它们为抽象类.其子类 (1)InputStre ...

  3. Java基础(二十七)Java IO(4)字符流(Character Stream)

    字符流用于处理字符数据的读取和写入,它以字符为单位. 一.Reader类与Writer类 1.Reader类是所有字符输入流的父类,它定义了操作字符输入流的各种方法. 2.Writer类是所有字符输出 ...

  4. 一。深入了解JDK1.8 从Package java.io开始

    Package java.io 通过数据流,序列化和文件系统提供系统输入和输出. See: 描述 接口摘要 接口 描述 Closeable A Closeable是可以关闭的数据的源或目的地. Dat ...

  5. 1.6 万字长文带你读懂 Java IO

    Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO 技术,对比 N ...

  6. java.io与网络通信

    文件IO java.io.File是用于操作文件或目录的类: File file = new File("hello.txt"); 实例化File时不关心路径的目标并不会去读取文件 ...

  7. Java IO: System.in, System.out, System.err

    原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) System.in, System.out, System.err这3个流同样是常见的数据来 ...

  8. Java IO: 管道

    原文链接 作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力.所以管道也可以作为 ...

  9. java代码写jsp读取,Java IO学习基础之读写文本文件-JSP教程,Java技巧及代码

    java的io操作都是基于流进行操作的,为了提高读写效率一般需要进行缓冲. 简单的示例程序如下: /** * 读出1.txt中的内容,写入2.txt中 * */ import java.io.*; p ...

最新文章

  1. HDU1089-1096 A+B for Input-Output Practice 系列问题(输入输出格式练习)
  2. 腾讯回应博鳌AI同传:系谣言,承认出现失误
  3. 精度45.9%,推理速度72.9FPS,百度飞桨推出工业级目标检测模型 PP-YOLO
  4. inux下如何查看CPU信息, 包括位数和多核信息
  5. linux suse最新版本,查看SUSE LINUX版本
  6. jenkins 添加 k8s 云
  7. 在选择数据库的路上,我们遇到过哪些坑?(1)
  8. Redis常用数据类型介绍、使用场景及其操作命令
  9. 笔谈FFmpeg(二)
  10. 20161018复习笔记
  11. R语言meta包的预后meta分析复现
  12. 2022-2023丰田bZ4X维修手册电路图TOYOTA技术资料
  13. 【webrtc 桌面采集】DXGI 流程
  14. iOS 苹果登录(第三方登录)
  15. maven安装使用手册之-----------------------maven介绍及安装部署
  16. 4.基于Android 12 分析系统启动过程
  17. chatgpt赋能Python-python_patsy
  18. PLC滑动平均值滤波(SMART 200梯形图篇)
  19. Android基础知识——Android SDK Manager详解
  20. 利用预训练网络打造自己的分类网络

热门文章

  1. Intel官网资料下载链接
  2. springboot整合rocketmq报错
  3. 5g云服务器性能,5G云手机是噱头吗?多多云手机功能性能媲美真机
  4. 红米K30s至尊纪念版和opporeno3参数对比 哪个更值得入手
  5. 6个线上视频音频转换网站
  6. 新年快乐c语言编码,云风的 BLOG
  7. 微信小程序云开发配置
  8. thinkpad笔记本uefi无法启动详细解决教程
  9. 如何给自己的抖音账号打标签?
  10. Opencv 图像处理:图像通道、直方图与色彩空间