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

时间:2019-08-28 14:04:47

标签: java file

有人可以告诉我如何从Java文件中读取每一行吗?

  BufferedReader br = new BufferedReader(new FileReader(file));
    String line = br.readLine();
        while(line != null){

            //Do something ..

           line = br.readLine()
        }

   br.close

4 个答案:

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

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

}