2013-08-16 50 views
1

我被測試出寫入文件與此代碼:的Java:問題訪問和寫入文件

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

A BufferedWriter這樣做,它會在輸出寫入目標之前緩衝輸出。這可以使BufferedWriter的使用更快,因爲它不需要馬上寫入緩慢的目標,比如磁盤或套接字。

當內部緩衝區,正以飽滿的內容將被寫入,您flushWriterclose作家

記住,如果你打開它,你應該關閉它...

例如。 ..

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(); 
     } 
    } 
} 

如果您使用的是Java 7,你可能想看看try-with-resources

+0

好吧......我修復了Capitolization,並添加了:fileWriter.flush()和fileWriter.close(),但仍然沒有任何反應。 – user2604533

+0

我寫過,但仍然沒有任何發生。 – user2604533

+0

我可以問你嘗試我的示例代碼嗎?因爲它適合我。此外,請確保您有寫入訪問權限,您正在嘗試寫入的位置... – MadProgrammer

1

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

後,必須flush()作家。爲了避免資源泄漏,您還應該使用編寫器(它會自動刷新它)。

所以你需要添加:

fileWrite.close(); 
0

您必須致電close()或至少flush()在寫入器上才能真正將緩衝區寫入文件。

+1

您應該**總是**關閉您打開的任何資源,這可能會導致以後出現問題 - 恕我直言 – MadProgrammer

+0

我同意,我甚至會以'finally'的方式做到這一點,以便確定。但問題是爲什麼數據不可見,並且可以通過'flush()'單獨到達。 – FrankPl

+0

(nit pick)只要調用'close',實際上就可以解決整個問題,這不僅有助於解決OP的問題,而且可以展示良好的實踐。如果OP正在寫入'Socket',那麼它肯定會同意添加'flush' - 恕我直言 – MadProgrammer