0

我有一个包含 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();    } 

}}  
4

3 回答 3

1

只需放置而不是linenum > 0下一行(MAP = inputFile.readLine()) != null 并删除下一行,linenum=linenum-1; MAP = inputFile.readLine();下次谷歌搜索可能会有所帮助 +) 最后一行的空值不会被打印,因为它将该行设置为当前行并将其与null 值,所以如果最后一行为 null,它将不会打印它,那么 10 行限制呢?你可以很容易地做到这一点你可以只添加一个索引到 for 循环和索引并检查 && 如果 i 低于 10

于 2010-12-23T16:49:44.140 回答
1

测试从 BufferedReader.readLine() 返回的值,如果它为 null,则停止循环,如下所示:

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();
}

这更难看,但只读取您需要的行。

于 2010-12-23T16:51:26.653 回答
0

如果它的值为空,你不打印 MAP 怎么样?

于 2010-12-23T16:49:56.447 回答