网站首页 > java教程 正文
JAVA中的文件操作2-如何读写文件
前面的JAVA中的文件操作1-如何获取文件信息,创建文件介绍了如何获取文件的信息,我们对文件大部分时候是读写操作,下面介绍一下。
文件读取
小文件读取
当我们要读取的文件较小,可以一次性处理时,有两种读取方式:
- 使用Files.readString直接将整个文件的内容读取成一个字符串
- 使用Files.readAllLines将文件内容读取成一个列表,按行分割。
注意:默认读取的字符集都是UTF-8,如果文件的字符集不是这个,这两个方法都提供了重载。这两个方法都是一次性把所有文件内容读入内存,如果文件较大,请不要使用这两个方法读取。
下面是代码示例:
Path path = Path.of("examlpe.txt");
// 使用`Files.readString`直接将整个文件的内容读取成一个字符串
String content = Files.readString(path);
System.out.println(content);
// 使用`Files.readAllLines`将文件内容读取成一个列表,按行分割
List<String> contentLines = Files.readAllLines(path);
System.out.println(contentLines);
大文件读取
大文件读取可以使用Files.lines方法,将文件读取成一个Stream<String>,每项内容是文件的一行,如下所示:
Path path = Path.of("examlpe.txt");
Files.lines(path).forEach(System.out::println);
注意:默认读取的字符集都是UTF-8,如果文件的字符集不是这个,这个方法都提供了重载Files.lines(Path path, Charset cs)。
文件写入
我们可以通过Files.writeString来写入单个字符串,也可以通过Files.write来写入多行字符串,或者是二进制数据。
写入时必须指定字符集。
下面是一个简单示例:
Path path = Path.of("examlpe_write_1.txt");
// 写入单个字符串
Files.writeString(path, "hello", StandardCharsets.UTF_8);
// 写入多行
List<String> lines = List.of("hello", "world"); // 1.9新增的便捷方法
Files.write(path, lines, StandardCharsets.UTF_8);
这里面的write和writeString方法,默认情况下,文件不存在会新建文件,文件存在的话会清空原内容后再写入。如果不希望这样,这两个方法都提供了一个重载参数OpenOption... options,可以用于指定打开文件的方式,这些方式都在java.nio.file.StandardOpenOption中有定义,下面是常用的几个:
- StandardOpenOption.READ 以读方式打开文件
- StandardOpenOption.WRITE 以写方式打开文件
- StandardOpenOption.CREATE 文件不存在会新建文件,文件存在则无影响
- StandardOpenOption.CREATE_NEW 文件不存在会新建文件,文件存在则报错
- StandardOpenOption.TRUNCATE_EXISTING 以写方式打开文件时清空文件内容
- StandardOpenOption.APPEND 以写方式打开文件时,新写入内容会被追加到文件尾
比如,前面的示例,我们希望改成追加写入。则可以这样写:
Path path = Path.of("examlpe_write_2.txt");
Files.writeString(path, "hello", StandardCharsets.UTF_8, StandardOpenOption.APPEND);
List<String> lines = List.of("hello", "world");
Files.write(path, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND);
猜你喜欢
- 2024-10-06 一文搞定java.lang.Class.isInstance和instanceof的区别
- 2024-10-06 如何使用Java 文件系统 File类?(java files类)
- 2024-10-06 Spring问题之提示文件不存在处理it does not exist
- 2024-10-06 Java中类加载器的工作原理(java中类加载器有几种)
- 2024-10-06 java常见问题(java常见问题及答案)
- 2024-10-06 「Java」常用的文件操作(java 文件处理)
- 2024-10-06 bitmap算法:如何在20亿个非负整数中如何判断一个数是否存在?
- 2024-10-06 Java 如何验证文件名的有效性?(java判断文件名包含字符串)
- 2024-10-06 java中读取properties文件最简单的方法
- 2024-10-06 五十六、探析Java文件过滤技术与高级文件检索方法
你 发表评论:
欢迎- 最近发表
-
- 你真的会用 Java 中的线程池吗?多个企业级线程池工具类封装实践
- 线程池的实现原理、优点与风险、以及四种线程池实现
- Java线程池ThreadPoolExecutor实现原理剖析
- 深入分析线程池的实现原理(线程池是干嘛的)
- 一文搞懂JAVA线程池工作原理(java线程池的工作流程)
- Java线程池的工作原理(java线程池的实现原理)
- 5分钟读懂C#中TcpClient、TcpListener和Socket三个类的角色
- JVM对象的创建过程(jvm运行过程中创建的对象一般存放在方法区)
- 对象组成与Java内存模型JMM分析(java对象在内存中存储的结构)
- JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)