1

我在阅读 .dat 文件时遇到问题。目前,我知道如何阅读 .dat/.txt 文件,但这对我来说有点棘手。

所以我有一组这样的数据:

测试数据

Sunday
Scuba Diving Classes
Mr.Jones
N/A
Yes

Sunday
Sailing
Mr. Jackson
N/A
Yes

Sunday
Generation Next
Ms.Steele
N/A
Yes

Monday
Helping Hands
Ms.Wafa
ANX0
No

我需要对这个文件做的是逐条记录文件记录,如果字符串activityname .equals 等于活动名称(例如水肺潜水课程),则设置以C开头的变量以供查看。这是它的编码:

try{
            BufferedReader reader = new BufferedReader(new FileReader("test.dat"));

                int numberOfLines = readLines();
                numberOfLines = numberOfLines / 6;

                for(int i=0;i < numberOfLines; i++)
                {
                    String CDay = reader.readLine();
                    String CActivityName = reader.readLine();
                    String CSupervisor = reader.readLine();
                    String CLocation = reader.readLine();
                    String CPaid = reader.readLine();
                    String nothing = reader.readLine();

                    if(CActivityName.equals(activityName))
                    {
                        txtDay.setText(CDay);
                        txtSupervisor.setText(CSupervisor);
                        txtLocation.setText(CLocation);

                        //If it Activity is paid, then it is shown as paid via radiobutton
                        if(CPaid.equals("Yes"))
                                {
                                    radioYes.setSelected(rootPaneCheckingEnabled);
                                }
                        if(CPaid.equals("No"))
                                {
                                    radioNo.setSelected(rootPaneCheckingEnabled);
                                }
                    }
                    else
                    {
                        reader.close();
                    }
                }
        }
        catch(IOException e)
        {
                Logger.getLogger(AddActivity.class.getName()).log(Level.SEVERE, null, e);
        }
    }

我已经使用 numberoflines 变量来遍历文件,但我的逻辑有缺陷,我不知道如何通过这个

方法的现状与错误

目前,该方法只读取第一条记录Scuba Diving Classes,当 if 条件为 false 时,不会遍历整个文件。

帮助!

4

2 回答 2

2

目前,此方法……当 if 条件为 false 时,不会遍历整个文件。

要找出原因,请查看else块:

else
{
    reader.close();
}

这意味着您BufferedReader在完成读取文件之前正在关闭。您无需在该else块中放置任何东西。

于 2013-03-10T17:56:45.393 回答
1

我看到 JB Net 评论帮助了你。同样,通常您应该在 finally 块中关闭 IO 变量(文件、数据或其他),如下所示:

InputStream is = null;
try{
    //open streams, do work
}catch(...){

}finally{
//seperate try catch here to make sure it does not affect anything else, just close one resource per try catch
try{
    if(is != null){
        is.close()
    }catch(Exception ...){
        //one line log
    }
}

在 java 7 中,您尝试过使用资源,但没有尝试过:)

于 2013-03-10T18:01:49.517 回答