2012-03-23 93 views
0

我正在嘗試創建一個簡單的程序,它將保留收集的數據的文本日誌。要這樣設置,我已經在程序開始運行下面的代碼(設置日誌文件和工具來使用它):Java文件IO異常

File logFile = new File("logs/logFile.txt"); 
FileWriter fw; 
FileReader fr; 
BufferedWriter writer; 
BufferedReader reader; 

public void someMethod(){ 
    System.out.println(logFile.getAbsolutePath()); 
    try{ 
     logFile.createNewFile(); 
    }catch(Exception e){ 
     System.err.println("WARNING: CANNOT CREATE FILE"); 
    } 
    try{ 
     fw = new FileWriter("plugins/Stalker/log.txt"); 
     fr = new FileReader("plugins/Stalker/log.txt"); 
     writer = new BufferedWriter(fw); 
     reader = new BufferedReader(fr); 
    } catch(Exception e){ 
     System.err.println("ERROR: CANNOT READ OR WRITE TO LOG FILE"); 
    } 
} 

當我運行這個,我打了兩個異常。它不會在第一個println中給出的路徑中創建文件或文件夾(日誌)。路徑和我期望的一樣,我應該對該目錄擁有寫入權限(我知道其他程序會定期將日誌寫入父目錄)......我已經使用了一些文件之前,但已經有點了,而我在這裏完全失敗。

我可能會遇到什麼樣的問題?你會提出什麼樣的嘗試來解決這個問題?

+0

在這裏粘貼logcat輸出 – Nav 2012-03-23 12:06:28

+0

您遇到的問題包含在您得到的例外中,您只需要將其打印出來即可。在catch塊中使用'e.printStackTrace()'。 – TPete 2012-03-23 12:12:15

+0

絕對路徑是否存在?你是否運行類Unix操作系統? – Andreas 2012-03-23 12:12:26

回答

2

當您使用文件夾時,您必須確保該文件夾存在。

爲此,您必須在logFile.createNewFile();之前編寫一個條件來檢查文件夾是否存在,因爲createNewFild不會創建文件夾。

你必須像這樣稍微修改程序。

File logFileFolder = new File("logs"); 
File stalkerFolder = new File("plugins/Stalker"); 
File logFile = new File("logs/logFile.txt"); 
FileWriter fw; 
FileReader fr; 
BufferedWriter writer; 
BufferedReader reader; 

public void someMethod(){ 
    System.out.println(logFile.getAbsolutePath()); 
    try{ 
     if (!logFileFolder.exists()){ 
      // Create folder if does not exist 
      logFileFolder.mkdir(); 
     } 
     logFile.createNewFile(); 
    }catch(Exception e){ 
     System.err.println("WARNING: CANNOT CREATE FILE"); 
    } 
    try{ 
     if (!stalkerFolder.exists()){ 
      // Create folders if does not exist 
      stalkerFolder.mkdirs(); 
     } 
     fw = new FileWriter("plugins/Stalker/log.txt"); 
     fr = new FileReader("plugins/Stalker/log.txt"); 
     writer = new BufferedWriter(fw); 
     reader = new BufferedReader(fr); 
    } catch(Exception e){ 
     System.err.println("ERROR: CANNOT READ OR WRITE TO LOG FILE"); 
    } 
} 
+0

這樣做了。謝謝。 – Porthos3 2012-03-23 12:49:18

0

您可以利用現有的exists方法File,以測試它是否存在與否。

如果我沒有記錯,FileWriter創建一個文件,如果它不存在。檢查其他構造函數是否附加。

但是,我認爲您所面臨的問題是因爲在嘗試讀取文件之前,您尚未關閉寫入文件。

中序刷新到流,你需要調用close

此外,像拉溫德拉Gullapalli提到的,​​你還需要檢查,如果該文件夾嘗試創建文件之前存在。如果不是,您需要使用mkdirs方法創建它們。