2011-05-05 6 views
4
... 
Scanner scan = new Scanner(System.in); 
System.out.println("Input : "); 
String t = scan.next(); 

FileWriter kirjutamine = new FileWriter("..."); 
BufferedWriter out = new BufferedWriter(writing); 
out.write(t)  
out.close(); 
... 

파일에 sometring을 쓰면 첫 번째 줄로 이동합니다. 그러나 프로그램을 다시 실행하면 새 텍스트가 이전 텍스트 위에 씁니다 (첫 번째 줄에). 나는하고 싶다 : 내가 뭔가를 삽입하면 다음 줄로 간다. 예를 들면 :Java에서 파일 끝에 추가하는 방법은 무엇입니까?

after 1 input) text1 

after 2 input) text1 

       text2 

등등 ... 내가 코드를 변경해야하는지

? 덕분에 !

답변

7
java.io.PrintWriter pw = new PrintWriter(new FileWriter(fail, true)); 

이렇게해야합니다. 이를 기존의 pw 라인 이상으로 사용하십시오.

편집 : 코멘트에 설명 된대로 그리고, 이것은 다음과 같은 일이 발생하는 원인이되는 : 옵션이 플래그가 true로 설정되는 '추가'로

  1. FileWriter가 생성되고있다. 이로 인해 FileWriter는 파일을 덮어 쓰지 않지만 추가를 위해 파일을 열고 포인터를 파일의 끝으로 이동합니다. (당신이 그것을 전달하는 파일 자체를 만드는 반대로.)

  2. 의 PrintWriter이 FileWriter를 사용

이 (편집의 많은 여기에 무슨. 내가 몇 번 질문에 대해 확신했다 .)

+2

+1. 부울 "true"는 선택적 추가 플래그이며 문서 (예 : 이전 버전, Google이 최신 버전을 제공하지 않음)에 대한 링크를 제공한다고 설명해야합니다. http://download.oracle.com/javase/1.4.2/docs /api/java/io/FileWriter.html –

+1

@ 리차드, 때로는 검색에서 '6'을 언급해야합니다. ;) http://www.google.co.uk/search?q=filewriter+javadoc+6 –

+0

@Peter, 팁 주셔서 감사합니다. 일반적으로 6, 거기에 내 기본 자바 검색을 향상시키기 위해 생각하지 않으므로 :) –

4

FileWriter 생성자에서 append 플래그를 사용하는 것이 좋습니다.

각 쓰기 사이에 또한 줄 바꿈을 추가 할 줄 수도, 당신은 RandomAccessFile를 사용 해달라고 이유

PrintWriter out = new PrintWriter(kirjutamine); 
out.print(t); 
out.close(); 
2

를? RandomAccessFile에서 읽기/쓰기 작업은 어느 위치에서나 수행 할 수 있습니다. 파일 포인터는 seek() 메서드로 아무 곳이나 이동할 수 있습니다. 파일 열기 모드를 사용하는 동안 파일 열기 모드를 지정해야합니다. 예 :

RandomAccessFile raf = new RandomAccessFile("anyfile.txt","rw"); // r for read and rw for read and write. 

하고 당신이 찾는 사용해야를 끝까지 파일 포인터를 취합니다().

raf.seek(raf.length()); 
+0

아니, AFAIU이 파일의 시작 부분에서 끝 부분이 아닌 쓸 것입니다 –

3

를 사용하는 대신 BufferedWriter를 사용하는)

관련 문제