2014-04-25 3 views
-2

파일에 여러 줄로 파일을 쓰고 싶습니다. 예를 들어 :파일에 여러 문자열 줄 쓰기

첫 번째 줄 : a b c d e f g h i
두 번째 줄 : j k l m n o p q r
세 번째 줄 : s t u v w x y z 1

하지만 내가 만든 코드가 그렇게 할 수 없습니다. 쓰기를 시도 할 때마다 한 줄에만 인쇄됩니다. 내 코드는 다음과 같습니다.

FileOutputStream write = new FileOutputStream ("file.txt"); 
PrintStream print = new PrintStream (write); 

BufferedReader in = new BufferedReader(new FileReader(data)); 
String read; 



while ((read = in.readLine()) != null) { 
    String[] splited = read.split("\n"); 
    for (int z = 0; z<splited.length; z++){ 

     print.print(splited[z]+" "); 

    } 

} 
print.println(); 

어떻게 해결할 수 있습니까?

+0

왜 당신이 다시 참조하지 않는다'det'와'bw_data'에 대한 코드가? 정리해 주시겠습니까? –

+0

또한 일반적인 제안으로 특정 문제를 해결하려는 경우 특정 문제에 대한 코드를 게시하면됩니다 (즉, 파일 작성). 세부 사항에 초점을 맞추면 종종 해결책을 찾을 수 있습니다. –

+0

이미 정리했습니다. – rilakkuma

답변

2

while 루프 내에서 print.println()을 이동해야합니다.

while ((read = in.readLine()) != null) { 
        String[] splited = read.split("\n"); 
     for (int z = 0; z<splited.length; z++){ 

      print.print(splited[z]+" "); 

     } 
     print.println(); // correct place for println 
    } 
0

을 그래서 우선 readLine은 뉴 라인까지, 한 줄을 읽고, 그래서 항상 문자열 자체를 반환하기 때문에 split("\n")를 호출 할 필요가 없습니다, 다음과 같이

올바른 방법입니다.

둘째, 출력 파일에 줄 바꿈을 쓰지 않으므로 모든 줄이 하나에서 펼쳐지도록 끝납니다. print.print(splited[z] + " "); 행을 print.print(splited[z] + "\n");으로 수정할 수 있습니다.

0

가독성과 성능을 향상시키기 위해 몇 가지 방법으로 코드를 변경했습니다.

  • 지금은 대신 뉴 라인 작성을위한 좋은 방법이있는 PrintStreamBufferedWriter를 사용하고 있습니다.
  • try-with-resources을 사용하고 있습니다. 이것은 자동으로 연결, 스트림 및 버퍼를 닫는 Java 7 이상의 기능입니다. 현재 코드에서는 독자 또는 작성자를 닫지는 않습니다. 이러한 작은 프로그램의 경우 큰 문제는 아니지만 프로그램을 닫는 것이 좋습니다.
  • while 루프 대신 for 루프를 사용했습니다. 이것은 제가 선택 한 멋진 트릭입니다. read을 내가 필요한 것보다 더 높은 범위로 정의하는 것을 저축합니다 (범위 - 크리프).

-

try (BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt")); 
    BufferedReader reader = new BufferedReader(new FileReader(data))) 
{ 
    for (String read = reader.readLine(); read != null; read = reader.readLine()) { 
     writer.append(read); 
     writer.newLine(); 
    } 
}