java:如何使用bufferedreader读取特定行

可以说我有一个文本文件:data.txt(包含2000行)

如何从500-1500,然后从1500-2000读取给定的特定行,并显示特定行的输出?

此代码将读取整个文件(2000行)

public static String getContents(File aFile) {

StringBuffer contents = new StringBuffer();

try {

BufferedReader input = new BufferedReader(new FileReader(aFile));

try {

String line = null;

while (( line = input.readLine()) != null){

contents.append(line);

contents.append(System.getProperty("line.separator"));

}

}

finally {

input.close();

}

}

catch (IOException ex){

ex.printStackTrace();

}

return contents.toString();

}

如何修改上述代码以读取特定行?

回答:

我建议使用java.io.LineNumberReader。它扩展了BufferedReader,您可以使用它LineNumberReader.getLineNumber();来获取当前行号

您还可以使用Java 7 java.nio.file.Files.readAllLinesList<String>如果适合您,它将返回a

注意:

1)比StringBuffer更喜欢StringBuilder,StringBuffer只是一个遗留类

2)contents.append(System.getProperty("line.separator"))没有好看的使用contents.append(File.separator),而不是

3)捕获异常似乎无关紧要,我也建议更改您的代码为

public static String getContents(File aFile) throws IOException {

BufferedReader rdr = new BufferedReader(new FileReader("aFile"));

try {

StringBuilder sb = new StringBuilder();

// read your lines

return sb.toString();

} finally {

rdr.close();

}

}

现在我认为代码看起来更清晰。如果您使用的是Java 7,请使用try-with-resources

    try (BufferedReader rdr = new BufferedReader(new FileReader("aFile"))) {

StringBuilder sb = new StringBuilder();

// read your lines

return sb.toString();

}

所以最后你的代码看起来像

public static String[] getContents(File aFile) throws IOException {

try (LineNumberReader rdr = new LineNumberReader(new FileReader(aFile))) {

StringBuilder sb1 = new StringBuilder();

StringBuilder sb2 = new StringBuilder();

for (String line = null; (line = rdr.readLine()) != null;) {

if (rdr.getLineNumber() >= 1500) {

sb2.append(line).append(File.pathSeparatorChar);

} else if (rdr.getLineNumber() > 500) {

sb1.append(line).append(File.pathSeparatorChar);

}

}

return new String[] { sb1.toString(), sb2.toString() };

}

}

请注意,它返回2个字符串500-1499和1500-2000

以上是 java:如何使用bufferedreader读取特定行 的全部内容, 来源链接: utcz.com/qa/431375.html

回到顶部