2013-08-16 4 views
1

을 파일로 작성 :자바 : 문제에 접근하고이 코드를 가진 파일에 쓰기 시험하고 있었다

package files; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 

public class FileTest1 
{ 
public static void main(String[] args) 
{ 
    try 
    { 
     try 
     { 
      File f = new File("filetest1.txt"); 
      FileWriter fWrite = new FileWriter(f); 
      BufferedWriter fileWrite = new BufferedWriter(fWrite); 
      fileWrite.write("This is a test!"); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.print("A FileNotFoundException occurred!"); 
      e.printStackTrace(); 
     } 
    } 
    catch(IOException e) 
    { 
     System.out.println("An IOException occurred!:"); 
     e.printStackTrace(); 
    } 
} 

}이 실행될 때

아무런 변화가 없습니다. "테스트입니다!" StackTrace 또는 "A/An [예외]가 발생했습니다!"... 문제의 원인을 알 수 없습니다. 내가 파일 아래에 패키지에 fileTest1.txt을 가지고 ...

+0

당신의 코드는'filetest1.txt'라고하고 당신의 의견은'fileTest1.txt'라고합니까? 대부분의 파일 시스템은 대소 문자를 구분합니다. 아마도 파일을 비운 다음 닫을 수도 있습니다. – Hyperboreus

+0

프로그램을 실행하는 데 사용하는 명령을 표시 할 수 있습니까? IDE를 던지고 있니? 어떤 플랫폼을 실행하고 있습니까? 또한 "파일 아래에 패키지에 fileTest1.txt가 있습니다"라고 말하면 그 의미를 명확히 할 수 있습니까? –

+0

또한 실제로 실행중인 프로그램을 실제로 실행하고 있습니까? 당신은 진정으로'FileTest1'을 운영하고 있습니까? 'System.println ("Hello");'또는 무엇인가를 main의 첫 번째 줄에 추가하십시오. 표시됩니까? 작업 디렉토리가 예상 한 것과 다른가요? 'filetest1.txt'가 다른 곳에서 만들어지고 있습니까? –

답변

4

대답 BufferedWriter 그냥 않습니다, 그것은 대상에 쓰기 전에 출력을 버퍼링합니다. 이로 인해 디스크 나 소켓과 같이 느린 대상에 직접 쓸 필요가 없으므로 BufferedWriter을 더 빠르게 사용할 수 있습니다.

내부 버퍼가 가득에 때 내용이 기록 될 것입니다, 당신은 당신이 그것을 열 경우, 당신은 예를 들어 ...

를 닫해야

가 기억하십시오 Writer 또는 close 작가를 flush. ..

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class TestFileWriter { 

    public static void main(String[] args) { 
     try { 
      BufferedWriter fileWrite = null; 
      try { 
       File f = new File("filetest1.txt"); 
       System.out.println("Writing to " + f.getCanonicalPath()); 
       FileWriter fWrite = new FileWriter(f); 
       fileWrite = new BufferedWriter(fWrite); 
       fileWrite.write("This is a test!"); 
       fileWrite.flush(); 
      } catch (FileNotFoundException e) { 
       System.out.print("A FileNotFoundException occurred!"); 
       e.printStackTrace(); 
      } finally { 
       try { 
        // Note, BufferedWriter#close will also close 
        // the parent Writer... 
        fileWrite.close(); 
       } catch (Exception exp) { 
       } 
      } 
     } catch (IOException e) { 
      System.out.println("An IOException occurred!:"); 
      e.printStackTrace(); 
     } 
     try { 
      BufferedReader br = null; 
      try { 
       File f = new File("filetest1.txt"); 
       System.out.println("Reading from " + f.getCanonicalPath()); 
       FileReader fReader = new FileReader(f); 
       br = new BufferedReader(fReader); 
       String text = null; 
       while ((text = br.readLine()) != null) { 
        System.out.println(text); 
       } 
      } catch (FileNotFoundException e) { 
       System.out.print("A FileNotFoundException occurred!"); 
       e.printStackTrace(); 
      } finally { 
       try { 
        // Note, BufferedWriter#close will also close 
        // the parent Writer... 
        br.close(); 
       } catch (Exception exp) { 
       } 
      } 
     } catch (IOException e) { 
      System.out.println("An IOException occurred!:"); 
      e.printStackTrace(); 
     } 
    } 
} 

당신이 자바 7을 사용하는 경우, 당신은 try-with-resources

+0

좋아요 ... capitolization을 수정하고 fileWriter.flush() 및 fileWriter.close()를 추가했지만 여전히 아무 일도 일어나지 않습니다. – user2604533

+0

나는 그것을 썼다. 그러나 여전히, 아무 일도 일어나지 않았다. – user2604533

+0

샘플 코드를 사용해 볼 것을 요청할 수 있습니까? 그것은 저를 위해 잘 작동하기 때문에. 또한 쓰려고하는 위치에 쓰기 권한이 있는지 확인하십시오 ... – MadProgrammer

1
을 살펴하실 수 있습니다

fileWrite.write("This is a test!"); 

후에는 flush() 작가에 있습니다. 리소스가 누출되지 않도록하려면 close() 라이터 (자동으로 플러시)가 있어야합니다.

fileWrite.close(); 
0

실제로 파일에 버퍼를 작성하려면 작성자에게 close() 또는 적어도 flush()으로 전화해야합니다.

+1

당신은 열려있는 자원을 항상 ** 닫아야합니다. 나중에 문제가 생길 수 있습니다. - IMHO – MadProgrammer

+0

나는 동의하며'finally'에서 그렇게 할 것입니다. 그러나 질문은 왜 데이터가 보이지 않는지에 대한 것이고, 이는 단지 'flush()'를 통해서만 도달 할 수 있습니다. – FrankPl

+0

(nit pick) 전체 문제는 실제로 OP의 문제를 해결하는 데 도움이 될뿐만 아니라 좋은 방법을 보여주는'close'를 호출하여 실제로 해결할 수 있습니다. OP가'Socket'에 글을 쓰고 있다면, 그것은'flush'를 추가하는 것에 도전적으로 동의 할 것이다 - IMHO – MadProgrammer