如何在 Java 中使用 BufferedReader [关闭]

Posted

技术标签:

【中文标题】如何在 Java 中使用 BufferedReader [关闭]【英文标题】:How to use BufferedReader in Java [closed] 【发布时间】:2013-04-22 08:30:42 【问题描述】:

对不起,如果这是一个明显的问题,但我似乎无法理解。我正在为数据结构课程做作业。它涉及从一个简单的 .dat 文件中提取数据。我们以前从未在 Java 中使用过任何文件访问选项,所以教授只是给了我们该部分的工作代码。

一个名为FileReadExample 的类创建一个新的BufferedReader 对象,打开一个文件,然后应该踢出一堆关于该文件的数据。 但我根本无法访问任何数据。

在一个单独的testMain 文件中,我创建了一个名为fr 的新FileReadExample 对象,然后尝试从那里打印出fr.readLine() 之类的东西,但它告诉我没有这样的方法。

我确定我错过了一些非常简单的东西。

教授的代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class FileReadExample

    public static void main(String[] args)
    
        System.out.println("got here");
        try
        
            BufferedReader in = new BufferedReader(new FileReader(new File("sample-file.dat")));
            System.out.println("File open successful!");

            int line = 0;
            for (String x = in.readLine(); x != null; x = in.readLine())
            
                line++;
                System.out.println(x);
                if (line <= 3)
                
                    String[] tokens = x.split(" ");
                    System.out.println("Number of tokens in line " + line + ": " + tokens.length);
                    System.out.println("The tokens are:");
                    for (String token : tokens)
                    
                        System.out.println(token);
                    
                
                else
                
                    String[] tokens = x.split("\\|");
                    System.out.println("Number of tokens in line " + line + ": " + tokens.length);
                    System.out.println("The tokens are:");
                    for (String token : tokens)
                    
                        System.out.println(token);
                    
                    Integer[] values = new Integer[tokens.length];
                    Integer sum = 0;
                    for (int i = 0; i < tokens.length; i++)
                    
                        sum += Integer.parseInt(tokens[i]);
                    
                    System.out.println("Sum: " + sum);
                
            
         catch (IOException e)
        
            System.out.println("File I/O error!");
        
    

谢谢。

【问题讨论】:

已搜索。和 YouTubed。并在这里搜索。根据我所看到的一切,它应该可以工作。我发现唯一可能是问题在于它全部包含在 try/catch 中。但我不确定为什么这很重要。 您刚刚发布的代码对我来说运行良好。您是否收到异常或任何错误消息? 它可以编译,但是当我运行我的测试主程序时,光标会闪烁并且程序结束。没有任何反应,即使代码中有一堆 println。我想我的问题是如何从在单独的测试主文件中创建的 FileReadExample 对象中的 BufferedReader 对象调用数据。 刚刚整理好你的格式。我使用 java => *** 找到的最简单的方法是首先在您喜欢的编辑器中正确格式化它,然后将代码复制粘贴到一个新文件中,选择所有行并点击制表符/缩进以在您发布时将其识别为代码。然后从那里粘贴。 【参考方案1】:

试试这个来读取文件:

BufferedReader reader = null;

try 
    File file = new File("sample-file.dat");
    reader = new BufferedReader(new FileReader(file));

    String line;
    while ((line = reader.readLine()) != null) 
        System.out.println(line);
    

 catch (IOException e) 
    e.printStackTrace();
 finally 
    try 
        reader.close();
     catch (IOException e) 
        e.printStackTrace();
    

【讨论】:

你必须将你的代码放在 try-catch 块中,因为你要读取一个文件,并且随时可能抛出异常 如果方法抛出 IOException,则不需要 try-catch 块。顺便说一句,这个问题的其他答案也缺少 try-catch 块,所以这只是一个如何读取文件的示例。 我更新了我的代码;现在开心?关于您自己的示例,请像我刚刚做的那样适当地关闭 BufferedReader。在您的示例中,如果在 br.readLine() 期间抛出异常,BR 将不会关闭。 到达 .close() 时如果 reader 为 null 怎么办? 一个简单的if (reader != null) 在关闭前检查就足够了。【参考方案2】:

据我了解 fr 是您的 FileReadExample 类的对象。所以很明显,如果你不自己创建一个类似 fr.readLine() 的方法。

其次,我认为 BufferedReader 类的正确构造函数将帮助您完成任务。

String str;
BufferedReader buffread = new BufferedReader(new FileReader(new File("file.dat")));
str = buffread.readLine();
.
.
buffread.close();

这应该对你有帮助。

【讨论】:

这是有道理的。因此 FileReader 创建了它自己的 Buffered Reader 对象,称为“in”。所以我的 testMain 中有一个名为 fr 的对象,其中应该有一个应该可以访问的 BufferedReader 对象。从测试主体,我怎么称呼它? fr.in.readLine() 不起作用。您在此处提供的代码应该放在 FileReader 中还是 main 中?谢谢,如果我遗漏了一些明显的东西,再次抱歉。 如何在 FileReadExample 类中创建一个方法,该方法使用 in.readLine() 方法并返回一个字符串值。所以例如。如果您创建一个名为 String readALine() 的方法,该方法返回 str。您可以像这样在 testMain 类中使用它-> mystr = fr.readALine(); 轰隆隆。明白了。存取方法,应该想到的。谢谢。

以上是关于如何在 Java 中使用 BufferedReader [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用java获取计算机中硬盘的真实序列号

在Java中有效地读取zip文件

Java OJ 快速读入 竞赛用

java 操作 TXT

java 怎么循环读取文件内容

java 读取大数据文件,处理大数据文件性能比较?