Java一分钟之-Java IO流:文件读写基础

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 【5月更文挑战第10天】本文介绍了Java IO流在文件读写中的应用,包括`FileInputStream`和`FileOutputStream`用于字节流操作,`BufferedReader`和`PrintWriter`用于字符流。通过代码示例展示了如何读取和写入文件,强调了常见问题如未关闭流、文件路径、编码、权限和异常处理,并提供了追加写入与读取的示例。理解这些基础知识和注意事项能帮助开发者编写更可靠的程序。

Java的IO流是处理输入输出操作的核心工具,包括读取文件、写入文件、网络通信等。本文将介绍文件读写的常见操作,分析易错点,并提供代码示例,帮助你快速掌握Java IO流的基础知识。
image.png

一、文件读写概述

Java中的FileInputStreamFileOutputStream用于处理文件的读写。读取文件时,数据从文件流向内存;写入文件时,数据从内存流向文件。

文件读取

  • FileInputStream:从文件中读取字节流。
  • BufferedReader:从字符流(如文件)中读取文本,提高了读取效率。

文件写入

  • FileOutputStream:向文件中写入字节流。
  • PrintWriter:向字符流(如文件)中写入文本,方便格式化输出。

二、常见操作

1. 文件读取

try (FileInputStream fis = new FileInputStream("example.txt");
     BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
   
   
    String line;
    while ((line = br.readLine()) != null) {
   
   
        System.out.println(line);
    }
} catch (IOException e) {
   
   
    e.printStackTrace();
}

2. 文件写入

try (FileOutputStream fos = new FileOutputStream("example.txt");
     PrintWriter writer = new PrintWriter(fos)) {
   
   
    writer.println("Hello, World!");
    writer.println("This is a test.");
} catch (IOException e) {
   
   
    e.printStackTrace();
}

三、常见问题与易错点

1. 未关闭流

问题:忘记关闭流可能导致资源泄漏,影响程序性能。 避免:使用try-with-resources语句自动关闭流。

2. 文件路径问题

问题:相对路径可能导致找不到文件,绝对路径更稳定。 避免:使用绝对路径,或确保程序运行目录正确。

3. 编码与解码

问题:默认编码可能与文件实际编码不匹配,导致乱码。 避免:明确指定编码,如new InputStreamReader(fis, "UTF-8")

4. 文件权限

问题:没有写入权限时,写入操作会失败。 避免:确保程序有写入文件的权限,或使用Files类的静态方法处理权限。

5. 文件操作异常处理

问题:忽视异常处理可能导致程序崩溃。 避免:捕获并处理IOException,确保程序健壮性。

四、代码示例:追加写入与读取

// 追加写入
try (FileOutputStream fos = new FileOutputStream("example.txt", true);
     PrintWriter writer = new PrintWriter(fos)) {
   
   
    writer.println("Additional content.");
} catch (IOException e) {
   
   
    e.printStackTrace();
}

// 读取追加内容
try (FileInputStream fis = new FileInputStream("example.txt");
     BufferedReader br = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) {
   
   
    String line;
    while ((line = br.readLine()) != null) {
   
   
        System.out.println(line);
    }
} catch (IOException e) {
   
   
    e.printStackTrace();
}

五、总结

理解Java IO流的基本概念,熟练掌握文件读写操作,是进行文件处理的基础。注意流的关闭、文件路径、编码问题,以及异常处理,能够帮助你编写更可靠的程序。在实际开发中,还可以考虑使用BufferedInputStreamBufferedOutputStream提高性能,或使用Files类提供的便捷方法。

目录
相关文章
|
27天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
65 9
|
28天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
65 2
|
7天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
63 34
|
19天前
|
Java
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
40 9
|
24天前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
38 3
|
27天前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
1月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
53 2
|
1月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
44 4
|
1月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
43 4
|
1月前
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry系统盘测评IOPS、IO读写和时延性能参数
ESSD Entry云盘是阿里云推出的新一代云盘,具备高IOPS、低延迟和企业级数据保护能力。适用于开发与测试场景,支持按量付费和包年包月计费模式。99元和199元的ECS经济型e实例和通用算力型u1实例均采用ESSD Entry系统盘,性价比高。详细性能参数和价格请参考阿里云官方页面。
65 0