0

每當我的程序試圖讀取或寫入一個文件,我得到了以下信息:讀/寫FileNotFoundException異常(訪問被拒絕)

[System]: LoadConfig >> Config file is missing or corrupt! 
C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Run.config (Access is denied) 

我看這件事在互聯網上,每個人都該有這個問題只是試圖讀取一個目錄,這與編寫文件的方式是一樣的。我加倍檢查了一切,但它繼續throwexception。 我試着以管理員身份運行程序,但是沒有做任何事情:/

如果你看看我的代碼,你可以看到我正在記錄一切。我會提供一份我的日誌。

這是我的閱讀方法:

public static ArrayList<String> readConfig(){ 

    ArrayList<String> list = new ArrayList<String>(); 

    try { 
     Scanner sc = new Scanner(searchForConfig(baseDir)); 
     //searchForConfig(baseDir) always will return a file. 

     while(sc.hasNextLine()){ 
      list.add(sc.nextLine()); 
     } 

     sc.close(); 

     return list; 
    } catch (FileNotFoundException e) { 
     Logger.addElement("[System]: LoadConfig >> Config file is missing or corrupt!"); 
     Logger.addElement(e.getMessage()); 
    } 

    list.add("Nothing"); 

    return list; 
} 

我的寫作方法如下:

public static boolean createNewFile(String Name, String Path, ArrayList<String> Content, boolean override){ 

    File file2 = new File(Path + dash + Name); 

    if(override == false & file2.exists()){ 

     Name += "1"; 

    }else{ 
     if(override == true & file2.exists()){ 
      file2.delete(); 
     } 
    } 

    if(!(Name.indexOf(".") > 0)){ 
     Name += ".cardinal"; 
    } 

    File file = new File(Path); 
    if(!file.isDirectory() | !file.exists()){ 
     Logger.addElement("[FileWriter]: NewFile >> New file path is invalid."); 
     Logger.addElement("[FileWriter]: NewFile >> Creating dirs at path."); 
     file.mkdirs(); 
    } 


    try { 

     PrintWriter pw = new PrintWriter(Path + dash + Name, "UTF-8"); 

     for(int i = 0; i < Content.size(); i++){ 
      pw.println(Content.get(i)); 
     } 
     Logger.addElement("[FileWriter]: NewFile >> Creating file " + Name + " at " + Path + dash); 
     pw.close(); 
     return true; 

    } catch (FileNotFoundException e) { 
     Logger.addElement("[FileWriter]: NewFile >> FileNotFoundException."); 
     Logger.addElement(e.getMessage()); 
     return false; 
    } catch (UnsupportedEncodingException e) { 
     Logger.addElement("[FileWriter]: NewFile >> UnsupportedEncodingException."); 
     Logger.addElement(e.getMessage()); 
     return false; 
    } 
} 

UPDATE: 我改變了我的記錄器記錄stacktraces找來更多信息。這是一個有點冗長,但一切都在那裏:

[System]: Config >> Searching for config in base directory... 
[System]: LoadConfig >> Config file is missing or corrupt! 
java.io.FileNotFoundException: C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Run.config (Access is denied) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(Unknown Source) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.util.Scanner.<init>(Unknown Source) 
    at com.orlow.base.FileSystem.Config.LoadConfig.readConfig(LoadConfig.java:21) 
    at com.orlow.base.FileSystem.Config.Config.<clinit>(Config.java:9) 
    at com.orlow.base.Init.Init.preInit(Init.java:20) 
    at com.orlow.base.Main.main(Main.java:10) 
[System]: Config >> Searching for config in base directory... 
[System]: LoadConfig >> Config file is missing or corrupt! 
java.io.FileNotFoundException: C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Run.config (Access is denied) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(Unknown Source) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.util.Scanner.<init>(Unknown Source) 
    at com.orlow.base.FileSystem.Config.LoadConfig.readConfig(LoadConfig.java:21) 
    at com.orlow.base.FileSystem.Config.Config.checkConfig(Config.java:13) 
    at com.orlow.base.Init.Init.preInit(Init.java:20) 
    at com.orlow.base.Main.main(Main.java:10) 
[preInit]: Logger >> Starting logger... 
[preInit]: Tests >> Testing config... 
[System]: Config >> Searching for config in base directory... 
[System]: LoadConfig >> Config file is missing or corrupt! 
java.io.FileNotFoundException: C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Run.config (Access is denied) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(Unknown Source) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at java.util.Scanner.<init>(Unknown Source) 
    at com.orlow.base.FileSystem.Config.LoadConfig.readConfig(LoadConfig.java:21) 
    at com.orlow.base.Init.Init.preTests(Init.java:62) 
    at com.orlow.base.Init.Init.preInit(Init.java:22) 
    at com.orlow.base.Main.main(Main.java:10) 
[preInit]: Config >> Config file is corrupt. 
[System]: SaveConfig >> Replacing Config file... 
java.io.FileNotFoundException: C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Run.config (Access is denied) 
    at java.io.FileOutputStream.open0(Native Method) 
    at java.io.FileOutputStream.open(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at java.io.PrintWriter.<init>(Unknown Source) 
    at java.io.PrintWriter.<init>(Unknown Source) 
    at com.orlow.base.FileSystem.DataStorage.Files.createNewFile(Files.java:98) 
    at com.orlow.base.FileSystem.Config.SaveConfig.replaceCorruptConfig(SaveConfig.java:26) 
    at com.orlow.base.FileSystem.Config.Config.getConfigMode(Config.java:32) 
    at com.orlow.base.FileSystem.Config.Config.getBuildPath(Config.java:77) 
    at com.orlow.base.Init.Init.preTests(Init.java:68) 
    at com.orlow.base.Init.Init.preInit(Init.java:22) 
    at com.orlow.base.Main.main(Main.java:10) 
[preInit]: Config >> Config file is corrupt. 
[System]: SaveConfig >> Replacing Config file... 
java.io.FileNotFoundException: C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Run.config (Access is denied) 
    at java.io.FileOutputStream.open0(Native Method) 
    at java.io.FileOutputStream.open(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at java.io.PrintWriter.<init>(Unknown Source) 
    at java.io.PrintWriter.<init>(Unknown Source) 
    at com.orlow.base.FileSystem.DataStorage.Files.createNewFile(Files.java:98) 
    at com.orlow.base.FileSystem.Config.SaveConfig.replaceCorruptConfig(SaveConfig.java:26) 
    at com.orlow.base.FileSystem.Config.Config.getConfigMode(Config.java:32) 
    at com.orlow.base.Init.Init.preTests(Init.java:74) 
    at com.orlow.base.Init.Init.preInit(Init.java:22) 
    at com.orlow.base.Main.main(Main.java:10) 
[preInit]: Config >> Config file is corrupt. 
[System]: SaveConfig >> Replacing Config file... 
java.io.FileNotFoundException: C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Run.config (Access is denied) 
    at java.io.FileOutputStream.open0(Native Method) 
    at java.io.FileOutputStream.open(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at java.io.PrintWriter.<init>(Unknown Source) 
    at java.io.PrintWriter.<init>(Unknown Source) 
    at com.orlow.base.FileSystem.DataStorage.Files.createNewFile(Files.java:98) 
    at com.orlow.base.FileSystem.Config.SaveConfig.replaceCorruptConfig(SaveConfig.java:26) 
    at com.orlow.base.FileSystem.Config.Config.getConfigMode(Config.java:32) 
    at com.orlow.base.FileSystem.Config.Config.getLogPath(Config.java:126) 
    at com.orlow.base.Init.Init.preTests(Init.java:80) 
    at com.orlow.base.Init.Init.preInit(Init.java:22) 
    at com.orlow.base.Main.main(Main.java:10) 
[preInit]: Config >> Log path is set to C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Logs 
[preInit]: Tests >> Config >> Config test was successful. 
[preInit] Tests >> Testing file writer... 
[FileWriter]: NewFile >> Creating file firstTestFile.cardinal at C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Data\ 
[FileWriter]: NewFile >> Creating file secondTextFile.cardinal at C:\Users\Cardinal System\AppData\Roaming\OrlowBase\Data\ 
[FileWriter]: NewFile >> Creating file thirdTestFile.cardinal at C:\Users\Cardinal System\Desktop\Peter\Programming\Java\Eclipse\Workspaces\Main Workspace\TestSkills\ 
[FileWriter]: NewFile >> Creating file forthTestFile.cardinal at C:\Users\Cardinal System\Desktop\Peter\Programming\Java\Eclipse\Workspaces\Main Workspace\TestSkills\ 
[preInit] Tests >> File writer test was successful. 
[Init]: Console >> Rendering console GUI... 
[System]: Console >> Type "?" for help. 
+0

也許改變'&''到&&'和'|''到'||和 –

+0

改變'如果(file.isDirectory()|!file.exists()){''到if(!file.isDirectory()&&!file.exists()){' –

+0

換言之,調試代碼 –

回答

1

檢查Orlowbase文件夾中用戶的權限。 當我拒絕讀/寫/總控制的權限時,我得到了你顯示的異常,當我允許它們時,你的程序運行良好。

enter image description here

+0

儘管我能夠在不更改文件夾權限的情況下解決此問題,但您仍然盡最大努力獲得一個良好的答案,以便獲得賞金:) –

-1
  • 這可能是一個權限問題。作爲你正在運行應用程序的用戶? 「Cardinal System」以外的用戶?檢查對C:\Users\Cardinal System\AppData\Roaming\OrlowBase\*的讀/寫訪問
  • 在捕獲FileNotFoundException時不要吞服stacktrace。它可能會導致你潛在的原因。

UPDATE: 'AppData'是用戶特定的文件夾,只能由用戶和管理員訪問。在此處查看更多信息: Can any user access the %APPDATA% folder

+0

我以管理員身份運行該程序,所以不應該成爲問題...此外,我希望這可以在我自己的計算機上工作,因此更改文件夾權限不是一個選項:/ about AppData,Minecraft是java基於一個有權訪問AppData,儘管它沒有提升權限 –

+1

我測試了createNewFile()方法,它創建的文件在我的機器上沒有錯誤。你可以分享searchForConfig()方法的代碼嗎?什麼是「基礎」路徑?您的日誌沒有此方法的任何路徑/目錄相關信息! – VinPro

相關問題