繁体   English   中英

如何从Java中的文件读取每一行

[英]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"));
  1. 首先,您流式传输文件行
  2. 您只保留前两行
  3. 跳过第一行

注意:在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
  • 您可以使用Stream API Java 8
  • 您可以使用流api供应商一次又一次地使用流对象
  • 我已经在hane添加了评论区域以了解您
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM