在Java中修改隐藏文件

在Java中修改隐藏文件,java,file,java-io,Java,File,Java Io,我有一个用户下载的文件,然后我在java中执行一个命令来隐藏该文件: Runtime.getRuntime().exec("attrib +H myFile.txt"); 现在,稍后我需要访问那个隐藏的文件,但我得到了 java.io.FileNotFoundException: myFile.txt (Access is denied) 如果文件未隐藏,但需要隐藏该文件,以便用户不会修改它,则此操作有效。那么我应该如何修改隐藏的文件呢?在Java中有什么方法可以做到这一点吗 谢谢你的建议。

我有一个用户下载的文件,然后我在java中执行一个命令来隐藏该文件:

Runtime.getRuntime().exec("attrib +H myFile.txt");
现在,稍后我需要访问那个隐藏的文件,但我得到了

java.io.FileNotFoundException: myFile.txt (Access is denied)
如果文件未隐藏,但需要隐藏该文件,以便用户不会修改它,则此操作有效。那么我应该如何修改隐藏的文件呢?在Java中有什么方法可以做到这一点吗

谢谢你的建议。

先取消隐藏文件:

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

我同意多尔夫的观点,但是你也可以考虑使用隐藏文件的方法。首先,您现在依赖于(Windows)“attrib”命令。其次,仅仅因为文件被标记为隐藏,并不意味着用户无法查看或修改它(我的机器设置为始终显示隐藏文件)。作为另一种选择,您可以考虑使用标准目录位置和文件名约定。例如,在Windows中,用于放置应用程序数据的标准位置位于“应用程序数据”文件夹中。您可以使用系统属性“user.home”找到此文件夹:

您可以使用此选项创建自己的应用程序数据文件夹:

//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来确定您正在运行的环境,并在此基础上构建正确的路径。

这不是所有选项中最好的,但可能是唯一的解决方法,因为这似乎是JVM中的一个错误。隐藏的≠ 只读和将隐藏文件视为只读是完全错误的。这不是隐藏文件的问题,实际问题是您没有更改文件属性的权限。您需要以管理员身份启动cmd,然后执行命令。您可以使用以下代码
processp=Runtime.getRuntime().exec(“cmd/c start runas/user:domain\\administrator/savecred:try.txt cmd”)
//*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");