[英]How to read every second line from a file in java
有人可以告诉我如何从Java文件中读取每一行吗?
BufferedReader br = new BufferedReader(new FileReader(file));
String line = br.readLine();
while(line != null){
//Do something ..
line = br.readLine()
}
br.close
一种简单的方法是仅维护读取的行数计数器:
int count = 0;
String line;
while ((line = br.readLine()) != null) {
if (count % 2 == 0) {
// do something with this line
}
++count;
}
但这在技术上仍会读取文件中的每一行,仅选择处理其他每一行。 如果您真的只想读取第二行,那么可能需要像RandomAccessFile
这样的东西。
您只需几行就可以用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块中使用它。
这类似于@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这样的方法更容易修改。 它还有一个缺点,就是比取模方法更难读。
这将帮助您做得很好
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) {
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.