このファイルに書き込む実際のコードがないため、この方法でアレイリストが保存される理由はわかりません。ここで簡単なテストを行ってみましょう:
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
}
あなたはどこにファイルに書き込みますか? – harandk
実際にファイルに書き込もうとしているコードはありますか?現在のところ、ただちに閉じられるファイルライターがあります – phflack