2014-02-16 4 views
0

다음 코드는 cmd에서 명령을 실행하고 명령 줄의 출력을 사용하여 텍스트 파일을 생성합니다. 아래 코드는 Eclipse의 출력 창에 올바른 정보를 보여 주지만 마지막 줄은 텍스트 파일에만 인쇄됩니다. 아무도 이것으로 나를 도울 수 있습니까?텍스트 파일에 여러 줄 쓰기 (java)

import java.io.*; 

public class TextFile { 
public static void main(String[] args) throws IOException { 
    try { 
     Process p = Runtime.getRuntime().exec("git log"); 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(p.getInputStream())); 
     BufferedWriter writer = null; 

     String line = null; 
     while ((line = in.readLine()) != null) { 

      writer = new BufferedWriter(new FileWriter("textfile.txt")); 
      writer.write(line); 
      System.out.println(line); 

      writer.close(); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 

    } 

    } 
} 
+2

이 파일을 덮어 씁니다. Writer를 루프 외부에 선언하고 루프 후에 닫습니다. (Btw, 당신의 코드는 읽기가 매우 어려우며, 다음 번에는 일관된 들여 쓰기를 따라하십시오.) – qqilihq

+0

** 요즘 ** Java의 새로운 IO 라이브러리를 사용해야합니다. 'NIO'라고 불린다. 핵심 클래스는'Paths','Path','Files'입니다. 예를 들어'Paths.get ("filename")'을 사용하여 파일을 찾거나'Files.write (pathToFile, stuffToWrite, options)'를 사용하여 파일에 쓸 수 있습니다. – Zabuza

답변

0

문제는 루프 내에 새로운 BufferedWriter를 생성한다는 것입니다. 2 차적으로, 당신은 또한 루프 내부의 작가를 닫고 있습니다. 마지막으로, 코드 블록이 약간 혼란 스럽습니다. 코드를 다시 포맷하면 (Eclipse의 Ctrl-F로 자동으로) 코드의 블록이 더 명확 해집니다.

귀하의 코드는 try/catch 블록의 try 부분 안쪽에, 다음과 같아야합니다

BufferedWriter writer = (new FileWriter ("textfile.txt")); 

    String line =null; 
    while ((line= in.readLine()) !=null) { 
     writer.write(line); 
     System.out.println(line); 
    } 
    writer.close(); 
2

다른 대답에 명시된 바와 같이이 문제는 루프 동안 내부 BufferedWriter 인스턴스를 생성하고 그 이유이다 마지막 행만 파일로 인쇄됩니다. try-with-resources 사용하여이 프로그램을 작성하는 더 좋은 방법의

하나 - 각각의 반복에 FileWriter를 작성하여

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class TextFile { 

    public static void main(String[] args) throws IOException { 
     try { 
      Process p = Runtime.getRuntime().exec("git log"); 

      try (BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
        BufferedWriter writer = new BufferedWriter(new FileWriter("textfile.txt"))) { 

       String line = null; 
       while ((line = in.readLine()) != null) { 
        writer.write(line); 
        writer.newLine(); 
        System.out.println(line); 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 

     } 
    } 
}