我有一个x行数的文本文件。每行包含一个整数。当用户单击按钮时,将通过actionlistener执行操作,其中应列出文本文件上显示的所有值。但是,现在我将linenum设置为10意味着我已经告诉代码只使用10行文本文件。因此,如果我的文本文件只有3行/行数据...它将列出这些行,而对于其他7行的其余部分,它将吐出“null”。
我记得有一种方法可以使用省略号让程序知道你不知道确切的值,但最后根据给定的信息计算它。我的给定信息将带有数字(数据)的行数。
以下是代码的一部分。
private class thehandler implements ActionListener{
public void actionPerformed(ActionEvent event){
BufferedReader inputFile=null;
try {
FileReader freader =new FileReader("Data.txt");
inputFile = new BufferedReader(freader);
String MAP = "";
int linenum=10;
while(linenum > 0)
{
linenum=linenum-1;
MAP = inputFile.readLine();//read the next line until the specfic line is found
System.out.println(MAP);
}
} catch( Exception y ) { y.printStackTrace(); }
}}
答案 0 :(得分:1)
将linenum > 0
放在下一行(MAP = inputFile.readLine()) != null
上
并删除下一行,linenum=linenum-1;
MAP = inputFile.readLine();
,下次谷歌搜索可能会有所帮助+)
不会打印最后一行的空值,因为它将该行设置为当前行并将其与空值进行比较,因此如果最后一行为空,则不会打印它以及10行的限制是多少?你可以轻松地做到这一点你可以只为for循环添加一个索引并索引并检查&&如果i低于10
答案 1 :(得分:1)
测试从BufferedReader.readLine()返回的值,如果它是null stop looping,就像这样:
BufferedReader reader = new BufferedReader(new FileReader("Data.txt"));
try {
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
} finally {
reader.close();
}
编辑:忘记了前10行的要求,您可以更改上面的代码将输出放在列表中并返回列表,然后您可以通过以下函数对其进行过滤:
public List<String> takeFirst(int howMany, List<String> lines) {
return lines.size() <= howMany ? lines : lines.subList(0, howMany);
}
如果文件很大,那么这当然是效率低下的,如果这很重要,你最终会做类似的事情:
BufferedReader reader = new BufferedReader(new FileReader("Data.txt"));
try {
int linesRead = 0;
for (String line; (line = reader.readLine()) != null && linesRead < 10;) {
System.out.println(line);
linesRead += 1;
}
} finally {
reader.close();
}
哪个更丑,但只读取你需要的行。
答案 2 :(得分:0)
如果MAP的值为null,你怎么不打印MAP?