Java IO 流知识总结
·
Java IO 流知识总结
一、文件字节输入流:读取文件数据的步骤
- 一次性读取完全部字节
- 可以定义与文件一样大的字节数组读取,也可以使用官方 API(如
InputStream.readAllBytes()等)
二、如何用字节输入流读取中文且输出不乱码?
- 一次性读取完全部字节
- 可以定义与文件一样大的字节数组读取,也可以使用官方 API
- 读取后需按正确的字符编码(如 UTF-8)将字节数组转为字符串再输出
字节流本身不识别字符编码,乱码通常出现在「字节 → 字符串」的解码环节,而非读取环节。
三、一次性将全部文件数据读入字节数组是否有问题?
| 优点 | 风险 |
|---|---|
| 操作简单,适合小文件 | 文件过大时,定义与文件等大的字节数组可能导致 内存溢出(OOM) |
建议: 大文件应使用缓冲流分块读取,而非一次性加载。
四、字节流与文件复制
字节流非常适合做文件的复制操作:
- 任何文件的底层都是字节
- 字节流做复制时,是一字不漏地转移全部字节
- 只要复制前后文件格式一致,复制结果就是正确的
五、字符输出流的注意事项
字符输出流写出数据后,必须刷新流或关闭流,写出去的数据才会真正生效。
| 方法 | 说明 |
|---|---|
public void flush() throws IOException |
刷新流:将内存中缓存的数据立即写到目标(如文件)中 |
public void close() throws IOException |
关闭流;关闭操作内部包含刷新 |
六、Commons-IO 框架
Commons-IO 是 Apache 开源基金会提供的一组 IO 操作小框架,目的是提高 IO 流的开发效率。
FileUtils 类(部分方法)
| 方法 | 说明 |
|---|---|
public static void copyFile(File srcFile, File destFile) |
复制文件 |
public static void copyDirectory(File srcDir, File destDir) |
复制文件夹 |
public static void deleteDirectory(File directory) |
删除文件夹 |
public static String readFileToString(File file, String encoding) |
按指定编码读取文件内容为字符串 |
public static void writeStringToFile(File file, String data, String charsetName, boolean append) |
按指定编码将字符串写入文件(append 为是否追加) |
IOUtils 类(部分方法)
| 方法 | 说明 |
|---|---|
public static int copy(InputStream inputStream, OutputStream outputStream) |
从输入流复制到输出流(字节流) |
public static int copy(Reader reader, Writer writer) |
从字符输入流复制到字符输出流 |
public static void write(String data, OutputStream output, String charsetName) |
按指定字符集将字符串写入输出流 |
更多推荐



所有评论(0)