本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
用Java读取纯文本文件?
似乎有多种方法可以读取和写入Java中的文件数据。
我想从文件中读取ASCII数据。有哪些可能的方法及其区别?
高分回答:
ASCII是一个TEXT文件,因此您将Readers用于读取。Java还支持使用读取二进制文件InputStreams。如果正在读取的文件很大,那么您可能希望在aBufferedReader上使用aFileReader来提高读取性能。
仔细阅读本文,了解如何使用Reader
我还建议您下载并阅读这本名为《Thinking In Java》的精彩(尚未免费)的书。
在Java 7中:
new String(Files.readAllBytes(...))
(docs)或
Files.readAllLines(...)
在Java 8中:
Files.lines(..).forEach(...)
高分回答:
我最喜欢的读取小文件的方法是使用BufferedReader和StringBuilder。它非常简单而且很关键(尽管不是特别有效,但是对于大多数情况来说已经足够了):
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
} finally {
br.close();
}
有人指出,在Java 7之后,您应该使用try-with-resources(即自动关闭)功能:
try(BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
}
当我读取这样的字符串时,无论如何我通常还是想对每行进行一些字符串处理,因此我继续进行此实现。
尽管如果我实际上只是想将文件读入字符串,我总是将Apache Commons IO与IOUtils.toString()方法一起使用。您可以在这里查看源代码:
FileInputStream inputStream = new FileInputStream("foo.txt");
try {
String everything = IOUtils.toString(inputStream);
} finally {
inputStream.close();
}
使用Java 7甚至更简单:
try(FileInputStream inputStream = new FileInputStream("foo.txt")) {
String everything = IOUtils.toString(inputStream);
// do something with everything string
}
文章翻译自 yl2gl72eozkinivz3vc6swkesy-ac4c6men2g7xr2a-translate.translate.goog/questions/4…
作者建议:之前讲了写入文件 如何创建文件并写入文件?
单线程下现在主流的复制方法有以下几种:
1、FileChannel
2、FileInputStream
3、BufferedOutputStream
4、BufferedReader
5、FileReader
现取单线程下最快的方法FileChannel 来做多线程处理
简单对比下写入:
可以看到,FileChannel的性能是比较高的。 简单说一下,就拿比较火热的rocketMQ来说,它是文件系统来存储数据的,生产和消费数据都是直接操作的文件,它会涉及到页缓存、FileChannel、FileChannel一次性读取1页4kb的数据,高性能得益于ByteBuffer 缓冲区、MMAP内存映射
RokcetMQ为了更好的性能也进行了调优
- 预分配MappedFile
- mlock系统调用
- 文件预热
- 顺序读、顺序写
我这里只是进行一个抛砖引玉,大家加油!
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️