2012-03-20 1 views
4

자바에서 파일을 열고 데이터를 추가하고 여러 번 닫을 수 있습니까? 예 :기존 파일을 Java로 열고 닫습니다.

//---- psuedocode 
     //class variable declaration 
     FileWriter writer1 = new FileWriter(filename); 

     fn1: 

     writer.append(data - title); 

     fn2: 
     while(incomingdata == true){ 
     writer.append(data) 
     writer.flush(); 
     writer.close() 
     } 

문제는 while 루프에 있습니다. 파일이 닫히고 다시 열리지 않습니다. 어느 누구도이 일에서 나를 도울 수 있습니까?

+0

처럼 사용? – bdares

+0

스트림이 닫히면 스트림에 액세스 할 수 없습니다. –

+1

그래서 * 닫지 않습니까? 여기서 뭐가 문제 야? – EJP

답변

2

매번 파일을 닫았다가 다시 열지 말라고하는 답변은 정확합니다.

그러나 절대적으로이 작업을 수행해야하는 경우 (그리고 나에게 분명하지 않은 경우) 매번 새 FileWriter를 만들 수 있습니다. FileWriter를 구성 할 때 두 번째 인수로 true를 전달하여 파일을 바꾸지 않고 파일에 추가하는 인수를 얻습니다. Like

FileWriter writer1 = new FileWriter(filename, true); 
+0

새 파일로 매번 파일이 대체되지 않는다고 가정 할 수 있습니까? – Siddharthan

+0

그건 두 번째 주장이주는 것입니다. 자세한 내용이 필요하면 javadoc에서 FileWriter를 확인하십시오. –

0

파일을 닫은 다음 다시 열어 보는 것은 좋지 않습니다. 파일을 여는 것은 비용이 많이 드는 작업이므로이 작업을 수행하는 횟수가 적을수록 코드를 빨리 실행하는 것이 좋습니다.

한 번 열고 파일 쓰기가 끝나면 닫습니다. 이것은 당신의 루프 밖에있을 것입니다.

1

일단 파일을 닫으면 다시 열어야합니다. writer.flush()을 호출하면 스트림을 플러시해야합니다. 기본적으로 while 루프 내에서 writer.close()을 제거합니다. 이렇게하면 파일을 끝내고 나면 파일을 닫을 수 있습니다.

두 가지 옵션이 있으므로 while 루프 내에서 writer.close()을 제거하거나 루프 시작 부분에 새로운 FileWriter 인스턴스를 생성하십시오.

1

일단 스트림이 닫히면, write() 또는 flush()의 호출에 의해 IOException가 Throw됩니다. 그러나 이전에 닫힌 스트림을 닫는 것은 효과가 없습니다.

while(incomingdata == true){ 
     writer.write(data) 
} 
writer.close() 

매번 플러시 할 필요가 없습니다. close()을 호출하면 먼저 스트림을 닫기 전에 데이터가 플러시됩니다.

내가 저장할 수있다 생성 된 파일을 업데이트했습니다. 어떤 인스턴트 메시지가 으로 닫히면 타임 스탬프가 업데이트됩니다. 파일이 동기화 될 때 이 (가) 발생합니다.

당신은 그 때마다 다시 수이

while(incomingdata == true){ 
      writer.append(data); 
      writer.flush(); 
} 
writer.close(); 
+0

루프를 다시 실행하면 어떻게됩니까? 파일을 다시 열 수 있습니까? Bcos 나는 루프의 끝에서 그것을 닫았습니다 – Siddharthan

+0

그것은 IOException을 던질 것입니다. 모든 데이터를 스트림에 기입하고 나서, 스트림을 닫습니다. –