逐行迭代文本文件的内容 - 是否有最佳做法?(与PMD的 AssignmentInOperand相比)

2022-09-01 01:16:56

我们有一个Java应用程序,它有一些知道读取文本文件的模块。他们使用如下代码非常简单:

BufferedReader br = new BufferedReader(new FileReader(file));  
String line = null;  
while ((line = br.readLine()) != null)  
{  
   ... // do stuff to file here  
} 

我在我的项目上运行了PMD,并在线上获得了“AssignmentInOperand”违规。while (...)

除了显而易见的之外,还有更简单的方法来执行此循环吗:

String line = br.readLine();  
while (line != null)  
{  
   ... // do stuff to file here  
   line = br.readLine();  
} 

这是否被认为是更好的做法?(虽然我们“复制”代码?line = br.readLine()


答案 1

我知道这是一个旧帖子,但我只是有同样的需求(几乎),我使用Apache Commons中FileUtils的LineIterator解决它。从他们的javadoc:

LineIterator it = FileUtils.lineIterator(file, "UTF-8");
try {
    while (it.hasNext()) {
    String line = it.nextLine();
    // do something with line
    }
} finally {
    it.close();
}

查看文档:http://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/LineIterator.html


答案 2

java-8 和 Java-7 的 Try-With-ResourcesLambda 的支持允许您以更紧凑的语法实现所需的内容。

Path path = Paths.get("c:/users/aksel/aksel.txt");

try (Stream<String>  lines = Files.lines(path)) {
    lines.forEachOrdered(line->System.out.println(line));
} catch (IOException e) {
    //error happened
}

推荐