2011-11-22 47 views
0

我正試圖在C:\驅動器上寫入文件,但出現異常。Java桌面應用程序無法寫入C:驅動器上的文件

產生java.io.IOException:訪問被拒絕。

代碼:

public class Test { 

    public static void main(String[] args) { 
     try { 
      StringBuilder sb = new StringBuilder(File.separator); 
      sb.append("index.txt"); 
      // sb is "\\index.txt" 
      File f = new File(sb.toString()); 
      boolean isCreated = f.createNewFile(); 
      System.out.println(isCreated); 
     } catch (IOException ex) { 
      Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

其實,我明白了,我沒有權限寫入文件有,但我確信它能夠以某種方式來完成。如果我有一個小程序,我只是獲得一個許可,但在這裏,我不知道該怎麼做。

的可能的解決方案,可以檢查,如果我可以在裏面寫一個文件,但要檢查它,我可能會嘗試先寫一個文件ADN然後以檢查是否有可能寫一個文件中有刪除它,但我不要找到這個解決方案的最佳方式。

+0

您不需要獲取分隔符來定義文件路徑。 「/index.txt」可以在Windows和Unix中使用。 –

回答

1

我寫了一個方法,即需要一個字符串到一個目錄,並檢查,你是否能寫出有一個文件:

static boolean canWrite(String folderPath) { 
    File file = new File(folderPath); 
    String new_file = "HastaLaVistaBaby"; 
    if (file.isDirectory()) { 
     try { 
      new File(file + "\\" + new_file).createNewFile(); 
     } catch (IOException e) { 
      return false; 
     } 
     new File(file + "\\" + new_file).delete(); 
     return true; 
    } else { 
     return false; 

    } 
} 

爲了提高它,你可以檢查,是否file.isFile( )並獲取父目錄並調用此方法。

2

最簡單的檢查方法是使用File.canWrite()

話雖如此,它看起來像你寫入驅動器的根目錄。在Windows上這可能不是一個好主意,你可能要考慮在其他地方寫作 - 例如一個temp dir

+0

我想寫一個文件,用戶想要一個應用程序來編寫一個文件,但正如我所看到的,我將不得不爲用戶做一個提示 - 他是否可以在選定的位置寫入。 – Benjamin

0

此行應該是:

sb.append("C:\\index.txt"); 

額外的反斜槓反斜槓。

無論你硬代碼的文件名,像我一樣,或者你從用戶獲取文件名,你需要完整的路徑和文件名。

相關問題