【问题标题】:Reading lines of data from text files using java使用java从文本文件中读取数据行
【发布时间】:2010-12-23 16:44:53
【问题描述】:

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

}}  

【问题讨论】:

    标签: java bufferedreader


    【解决方案1】:

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

    【讨论】:

    • 处理文件?每次遇到问题时我都在做什么
    • 谢谢。每次执行我将有大约 5-20 行。我想为了安全起见,我会将其设置为 100:/ 或者我可能会查看计算文件中的行数并将其设置为整数,将其限制为行数..谢谢跨度>
    • 我认为有一些命令可以知道确切的行数,请花 5 - 10 分钟检查一下
    • 经过一番谷歌搜索后,没有命令可以知道确切的行数,如果你想打印整个文件,你不需要添加 i 循环,因为最后一行是始终为空,并且在任何情况下都不会引发异常,但是如果您想在每次点击时放置准确的行数,则需要 i 计数器
    【解决方案2】:

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

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

    【讨论】:

    • 这不符合 OP 的“限制为 10”的要求。只是说'
    【解决方案3】:

    如果MAP的值为null,您不打印MAP怎么样?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多