2014-01-08 6 views
0

나는 arraylist (result_arraylist)와 gson 라이브러리를 사용하여 자바 객체를 JSON으로 변환 한 다음 텍스트 파일로 인쇄합니다.내 파일이 계속 덮어 쓰기가되는 이유는 무엇입니까?

Gson gson = new Gson(); 
File file = new File(file_path); 
FileWriter fWriter; 
BufferedWriter bWriter; 

try { 
    //create the file if it doesn't exist 
    if((!file.exists())) { 
     file.createNewFile(); 
    } 
    fWriter = new FileWriter(file.getAbsoluteFile()); 
    bWriter = new BufferedWriter(fWriter); 
    for(int j = 0; j < result_arraylist.size(); ++j) { 
     bWriter.write("<!--"); //this and the last string I write to the file is just to separate the objects for when I read the file again 
      bWriter.newLine(); 
     bWriter.write(gson.toJson(result_arraylist.get(j))); //take the object at index j, convert it to JSON and write to file 
      bWriter.newLine(); 
     bWriter.write("-->"); //seperator to denote end of object 
      bWriter.newLine(); 
      bWriter.newLine(); 
    } 
} 
catch(IOException e) {e.printStackTrace();} 

내가 여기에 표시되지 않은 것은이 모든 반복에 다른 개체와 result_arraylist을 채우 for loop 큰 중첩된다는 것이다 : 여기 내 코드입니다. 내 문제는 주 의 반복마다 파일이 계속 덮어 쓰여지고 있다는 것입니다.

+0

위 코드는 설명하는대로 수행되지 않습니다. 당신은 하나의 반복 만 있거나 당신이 기대하는 것과 다른 무언가를하고 있습니다. 디버거에서 코드를 단계별로 실행하여 실제로 수행중인 작업을 확인하는 것이 좋습니다. –

+0

@PeterLawrey 마지막 단락 OP에서는이 전체 코드를 for 루프에 추가하고 seperator를 사용하여 해당 파일의 각 json 객체를 알 수 있습니다. 나는 오해하고 있는가? –

답변

3

FileWriter(String fileName, boolean append) 생성자에 true를 전달하여 File을 추가 모드로 엽니 다. 그러면 기존 콘텐츠가 무시됩니다.

기록 된 데이터를 추가할지 여부를 나타내는 부울 값이있는 파일 이름이있는 FileWriter 객체를 생성합니다. 이 루프에 대한 더 큰이기 때문에

fWriter = new FileWriter(file.getAbsoluteFile(), true); 
+1

몇 주 전에이 문제가 있었는데 이것이 바로 내가 고칠 수 있었던 일입니다. +1 –

+0

감사합니다. 그것은 나를 위해 일했다. – user3015565

+0

@ user3015565 이렇게하면 한 번에 하나씩 만 쓰고 이전 데이터를 훼손하지 않도록 추가해야합니다. –

0

은, 때마다 당신은 당신이 파일을 다시 여는이 부분의 코드를 실행합니다. 파일을 다시 열면 기본적으로 덮어 씁니다.

외부 루프 외부에서 한 번 파일을 열면이 문제를 피할 수 있습니다.

파일을 여러 번 열려고하는 경우 Suresh가 말한 것처럼 append 플래그를 사용하십시오.