2010-05-20 29 views
3

我有一個用戶下載,然後我的java中執行命令隱藏文件的文件:修改一個隱藏文件中的Java

Runtime.getRuntime().exec("attrib +H myFile.txt"); 

現在,以後我需要訪問隱藏的文件,但我發現

java.io.FileNotFoundException: myFile.txt (Access is denied) 

這適用於文件沒有隱藏,但文件需要隱藏,所以用戶不會修改它。那麼我該如何修改隱藏文件呢?有沒有辦法在Java中做到這一點?

感謝您的想法。

+0

這不是隱藏文件的問題,實際問題是您無權更改文件屬性。您需要以管理員身份啓動cmd,然後執行命令。你可以使用下面的代碼:Process p = Runtime.getRuntime()。exec(「cmd/c start runas/user:domain \\ administrator /savecred:try.txt cmd」);' – 2013-08-27 18:01:14

回答

3

取消隱藏文件第一:

Runtime.getRuntime().exec("attrib -H myFile.txt"); 
           ^
+1

這不是最好的選擇但可能是唯一的解決方法,因爲這似乎是JVM中的一個錯誤。 **隱藏≠只讀**並將隱藏文件視爲只讀是純粹錯誤的。 – Martin 2013-05-15 07:01:59

5

我多爾夫同意,但您也可以考慮替代使用隱藏的文件。首先是你現在依賴於(Windows)「attrib」命令。其次,僅僅因爲文件被標記爲隱藏並不意味着用戶無法看到或修改它(我的機器設置爲始終顯示隱藏的文件)。作爲替代方案,您可以考慮使用標準目錄位置和文件更新約定。例如,在Windows中,放置應用程序數據的標準位置位於「應用程序數據」文件夾中。您可以使用系統屬性「的user.home」這個文件夾:

System.out.println(System.getProperty("user.home")); 
//prints out something like C:\Documents And Settings\smithj 

您可以使用此創建自己的Application Data文件夾:

//For Windows 
File appDataDir = new File(System.getProperty("user.home"), "Application Data\\MyWidgetData"); 

同樣在* nix的環境中應用程序通常保持他們的數據在主目錄中一個名爲.xyz目錄:

//*nix OSes 
System.out.println(System.getProperty("user.home")); 
//prints out something like /user/home/smithj 
File appDataDir = new File(System.getProperty("user.home"), ".MyWidgetData"); 

你可以看一下屬性os.name,以確定正在運行什麼環境和建設的正確道路BA sed在那。

+0

好的,謝謝你的回覆。 – Marquinio 2010-05-20 17:23:07