有人可以告诉我如何从Java文件中读取每一行吗?
BufferedReader br = new BufferedReader(new FileReader(file));
String line = br.readLine();
while(line != null){
//Do something ..
line = br.readLine()
}
br.close
答案 0 :(得分:1)
一种简单的方法是只维护一个读取行数的计数器:
int count = 0;
String line;
while ((line = br.readLine()) != null) {
if (count % 2 == 0) {
// do something with this line
}
++count;
}
但是从技术上讲,这仍然会读取文件中的每一行,仅选择处理每隔一行。如果您真的只想阅读第二行,那么可能需要使用RandomAccessFile
之类的东西。
答案 1 :(得分:1)
您可以用Java 8方式完成,只需很少的几行:
static final int FIRST_LINE = 1;
Stream<String> lines = Files.lines(path);
String secondLine = lines.limit(2).skip(FIST_LINE).collect(Collectors.joining("\n"));
注意::在Java 8中,使用Files.lines()时,应随后关闭流或在try-with-resource块中使用它。
答案 2 :(得分:0)
这类似于@Tim Biegeleisen的方法,但是我想我会展示一种替代方法,使用boolean
而不是计数器来获取其他所有行:
boolean skipOddLine = true;
String line;
while ((line = br.readLine()) != null) {
if (skipOddLine = !skipOddLine) {
//Use the String line here
}
}
这将在每次循环迭代时切换boolean
值,从而跳过每条奇数行。如果要跳过每偶数行,则只需将初始条件更改为boolean skipOddLine = false;
。
注意:这种方法仅在不需要扩展功能以跳过每3行的情况下才有效,例如,像Tim这样的方法更容易修改。它还有一个缺点,就是比取模方法更难读。
答案 3 :(得分:0)
这将帮助您做得很好
try (BufferedReader reader =
new BufferedReader(
new InputStreamReader(
new ByteArrayInputStream(x.getBytes()),
"UTF-8"))) { //this will help to you for various languages reading files
Supplier<Stream<String>> fileContentStream = reader::lines; // this will help you to use stream object again and again
if (FilenameUtils.getExtension(x.getOriginalFilename()).equals("txt")) { this will help you to various files extension filter
String secondLine = lines.limit(2).skip(FIST_LINE).collect(Collectors.joining("\n"));
String secondLine =
fileContentStream
.get()
.limit(2)
.skip(1)// you can skip any line with this action
.collect(Collectors.joining("\n"));
}
else if (FilenameUtils.getExtension(x.getOriginalFilename()).equals("pdf")) {
} catch (Exception ex) {
}