我建议使用java.io.LineNumberReader。它扩展了BufferedReader,您可以使用它
LineNumberReader.getLineNumber();来获取当前行号
您还可以使用Java 7
java.nio.file.Files.readAllLines,
List<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



