1

.datファイルの読み取りに問題があります。現在、私は.dat / .txtファイルの読み方を知っていますが、これは私にとって少し注意が必要です。

だから私はこのようなデータのセットを持っています:

test.dat

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がアクティビティの名前(例:スキューバダイビングクラス)と等しい場合、 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変数を使用してファイルを調べましたが、ロジックに欠陥があり、これをどのように処理するかわかりません。

メソッドの現在のステータスとエラー

現在、このメソッドは最初のレコードのスキューバダイビングクラスのみを読み取り、if条件がfalseの場合はファイル全体を調べません。

ヘルプ!

4

2 に答える 2

2

現在、このメソッドは ... if 条件が false の場合、ファイル全体を処理しません。

理由を理解するには、次のelseブロックを見てください。

else
{
    reader.close();
}

これはBufferedReader、ファイルの読み取りが完了する前に を閉じていることを意味します。elseそこのブロックに何も入れる必要はありません。

于 2013-03-10T17:56:45.393 に答える
1

JBネットのコメントがお役に立てば幸いです。また、一般的には、次のように、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 に答える