2017-06-19 13 views
0

ユーザ入力をTextFieldに読み込み、ArrayListをファイルに保存するプログラムを作成したかったのですが、次に、ボタンを使用すると、探している動物の名前を入力してArrayListからオブジェクト(名前、ID、動物の輸入国を含む)を削除できます。これは、削除ボタンが押されたときに呼び出されるメソッドのコードです。私はFileNotFoundExceptionを得て、私は理由を理解していません。助けてくれませんか?ArrayListからオブジェクトを印刷するとファイルが見つかりません

public void DeleteLine(String fileName,String strSearched){ 
      try { 

       ObjectInputStream os = new ObjectInputStream(new FileInputStream(fileName)); 
       ObjectInputStream osTMP = new ObjectInputStream(new FileInputStream("ZooTMP.txt")); 
       animal = (ArrayList<ANIMAL>) os.readObject(); 

       System.out.println("Original contents of animal: "); 
        Iterator itr = animal.iterator(); 

        while(itr.hasNext()) { 
        Object ANIMAL = itr.next(); 
        if (ANIMAL.contains(strSearched)) { 

         itr.remove(); 
          } 


        } 
        System.out.println(); 

        os.close(); 
        osTMP.close(); 

      } catch (FileNotFoundException ex) { 
       System.out.println("Can't find the file Zoo.txt"); 
      } catch (IOException ex) { 
       System.out.println("The file Zoo.txt has already been closed"); 
      } catch (ClassNotFoundException ex) { 
       System.out.printf("Class is missing: %s\n",ex); 
      } 

     } 

これは、インターフェイスの動物である:

package GUI_Try; 

import java.io.*; 

class ANIMAL implements Serializable { 
    String name, ID, country; 

    public ANIMAL(String name, String ID, String country){ 
     this.name = name; 
     this.ID = ID; 
     this.country = country; 
    } 
} 
+0

'fileName'があなたのプログラムを起動している場所の作業ディレクトリにあるファイルを指していることを確認してください。 –

+0

FileNotFoundExceptionのメッセージは何ですか?ファイル名は絶対パスか、作業ディレクトリにありますか?それは存在しますか?ファイル名を表示または記録し、そのファイルが存在するかどうかをテストするデバッグコードを追加することを検討してください。 'boolean isExtant = new File(fileName).exists()' –

+0

ファイルからデータをロードするときのようです。正しく読み込まれ、すべてが読み込まれます。しかし、私は選択したディレクトリ内のファイルを見つけることができません。私は他のどこでもそれを見つけることができません。 FileNotFoundExceptionは未使用の 'osTMP'によって引き起こされました。しかし、私はまだこのファイルがどこにあるのだろうと思っています。 –

答えて

0

まず、あなたは、ファイルがプロジェクトがある同じディレクトリに作成されていることを確認していますか?どのサブディレクトリもファイル名に含める必要があります。

第2に(おそらく関連していません)、ストリームの開閉以外にコード内のどこにでもosTMPを使用しているようには見えません。おそらく、これが原因でファイルがFileNotFoundExceptionですか?プロジェクトファイル内のファイルアーキテクチャに関する情報が役立ちます。一度に1つの行または他の行をコメントアウトして、どのファイルがこの例外を引き起こしているかを把握することができます。これは問題の修正にも役立ちます。

+0

私はあなたのアドバイスに従った。 'FileNotFoundException'が未使用のosTMPによって引き起こされたようです。その後、私のファイルは 'name'、' ID'と 'country'の3つのフィールドを持つ' ArrayList'を含んでいるので、 'if(ANIMAL.equals(strSearched))' '行で私のコードは実行を停止しました。明らかに、 'strSearched'は3つのフィールドすべてに決して等しくないので、このif文は決して真ではありません。 'ArrayList'オブジェクトに与えられた名前が含まれているかどうかをどうやって調べることができますか?私は様々な方法で 'contains 'を使ってみましたが、私はいつもエラーがあります。 –

+0

上記のコメントに間違いがありますが、その行は 'if(ANIMAL.contains(strSearched)){'となりました。エラーメッセージ「メソッドcontains(String)はObject型に対して定義されていません。 'ArrayList'オブジェクトの名前が例えば' lion'かどうか、どうすればよいかを知ることができますか?オブジェクト全体の中に指定された文字列が含まれているかどうかを調べるにはどうすればいいですか?ありがとうございました。 –

+0

'String str = ANIMAL.name;'のような行を 'Object ANIMAL = itr.next()'の後に追加し、if条件で 'str'と' strSearched'を比較することができます。 –

関連する問題