2017-11-01 3 views
0

私のライブラリ内のDVDを追跡するためのプログラムを書いています。私はarraylistから追加または削除されたDVDオブジェクトを保存するテキストファイルを変更するのに問題があります。すべての情報を保持している既存のテキストファイルを上書きするsaveメソッドを呼び出すときは、何も変更されません。私の追加と削除の方法はうまくいきますが、それは私が読んでいるファイルを上書きする保存方法で、うまくいきません。次のコードは、arraylistをファイルに保存しようとしています。私のファイル名はDVDCollection.txtで、ブール変数フラグは、arraylistからオブジェクトを追加または削除するコードに達したかどうかをチェックするために使用される静的変数です。arraylistを変更しているファイルを上書きする方法

public void save() { 
    try{ 
     if(flag=true){ 
      FileWriter instream = new FileWriter("DVDCollection.txt",false); 
      instream.close(); 
     }else{ 
      return; 
     } 
    }catch(IOException e){ 
     System.out.println("The file could not be written to!"); 
    } 
} 
+1

あなたはどこにファイルに書き込みますか? – harandk

+2

実際にファイルに書き込もうとしているコードはありますか?現在のところ、ただちに閉じられるファイルライターがあります – phflack

答えて

0

このファイルに書き込む実際のコードがないため、この方法でアレイリストが保存される理由はわかりません。ここで簡単なテストを行ってみましょう:

import java.io.*; 
import java.util.*; 

public class FileSaveTest { 

    public static void main(String[] args) { 
     FileSaveTest test = new FileSaveTest(); 
     test.fill(); 
     test.save(); 
    } 

    public void fill() { 
     arrayList.add("My disc 1"); 
     arrayList.add("My disc 2"); 
     arrayList.add("Another disc"); 
    } 

    public void save() { 
     try { 
      if(flag) { // you dont need ==true 
       FileWriter instream = new FileWriter("DVDCollection.txt",false); 
       for (String entry : arrayList) { 
        instream.write(entry + "\n"); 
       } 
       instream.close(); 
      } else { 
       return; 
      } 
     } catch(IOException e) { 
      System.out.println("The file could not be written to!"); 
     } 
    } 

    private ArrayList<String> arrayList = new ArrayList<>(); 
    private static boolean flag = true; 
} 

次に、このような方法でファイルを閉じるのはあまり良くありません。書き込み中に例外が発生すると、ファイルは閉じられません。 instream.close()を "finally"ブロックに入れる必要があります。あなたは、Java 7を使用している場合、あなたは試し-と資源の構文を使用することができ、

public void save() { 
    Writer instream = null; 
    try { 
     if(flag) { // you dont need ==true 
      instream = new FileWriter("DVDCollection.txt",false); 
      for (String entry : arrayList) { 
       instream.write(entry + "\n"); 
      } 
     } else { 
      return; 
     } 
    } catch(IOException e) { 
     System.out.println("The file could not be written to!"); 
    } finally { 
     try { 
      if (instream != null) 
       instream.close(); 
     } catch (IOException e) { 
      System.err.println("Exception during close"); 
     } 
    } 
} 

または::このブロックには関係なく、例外が発生したか、returnキーワードが満たされているかどうかの、いずれの場合に実行されます

public void save() { 
    if(flag) { // you dont need ==true 
     try (Writer instream = new FileWriter("DVDCollection.txt",false)) { 
      for (String entry : arrayList) 
       instream.write(entry + "\n"); 
     } catch(IOException e) { 
      System.out.println("The file could not be written to!"); 
     } 
    } // you dont need "return else { return; }" anymore 
} 
0

は、Java 8を使用するか、それは同じくらい簡単です上記されている場合:あなたは正しい道を提供していることを確認してください

List<String> lines = Arrays.asList("first line", "second line"); 
    try { 
     Files.write(Paths.get("my-file.txt"), lines); 
    } catch (IOException e) { 
     //handle exception 
    } 

関連する問題