可以说我有一个文本文件: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.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
问题内容: 我正在阅读文件,但我不知道如何阅读口音和特殊字符,这是我阅读的代码,我必须添加其他编纂,但我不知道该怎么做 谢谢 问题答案: 请尝试以下操作:
我试图创建一个简单的java服务器应用程序,但我很难用BufferedReader正确读取用户的输入。问题是行delimeter仅为CR LF(“\r\n”),因此我不能使用readLine()标准方法。因此,我尝试实现我自己的方法: 现在,当我尝试获取并打印结果时: ...它只将字符序列打印到第一个换行符(“\r”或“\n”),其余输入由第二次调用readCRLFLine(inputStream
问题内容: 我正在使用Apache POI库,但是我有一些不想读取的数据-因此,我需要该程序才能从特定的行开始读取文件。 我想要来自第10行之后的单元格和行的所有数据,直到文档为空。我尝试了以下代码。 但这只会为我提供第10行中所有单元格的数据。 我期待收到您的来信:-)。 问题答案: 您仅从此处的第11行获取数据: 请参阅Sheet.getRow(int rownum) 的文档 返回基于0的逻辑
我正在使用Apache POI库,但我有一些数据我不想被读取 - 所以我需要程序从特定行开始读取文件。 我需要第10行之后的单元格和行中的所有数据,直到文档为空。我已尝试使用以下代码。 但它只会给我第10行单元格的所有数据。 我期待着你的消息:-)。
问题内容: 我想使用BufferedReader在控制台中输入多行文本,然后单击“ Enter”以查找整个文本长度的总和。问题在于,似乎我进入了一个无限循环,当我按“ Enter”键时,程序并没有结束。我的代码如下: 你能告诉我我在做什么错吗? 问题答案: 阅读所有行的惯用方式是。另外,我建议发表声明。就像是 如果你想,当你收到一个空行来结束循环,在添加一个测试为循环 JLS-14.15。该声明说
你好,虽然我读了很多其他答案,但我不明白如何关闭BufferedReader而不发送输入。这是我程序的阻塞部分: 当我从主线程调用“endListing()”时,程序终止--但不会在用户输入任何内容之前终止。我想让程序立即终止--如何启动这个BufferdReader(像BufferedReader一样创建(新的InputStreamReader(System.in))? 我试图在主线程中的这个线