【问题标题】:Modify a hidden file in Java在 Java 中修改隐藏文件
【发布时间】:2011-02-21 22:45:36
【问题描述】:

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

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

现在稍后我需要访问该隐藏文件,但我得到了

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

如果文件未隐藏,则此方法有效,但需要隐藏文件,以便用户不会修改它。那么我应该如何修改隐藏文件呢?有没有办法在 Java 中做到这一点?

感谢您的想法。

【问题讨论】:

  • 这不是隐藏文件的问题,实际问题是您没有更改文件属性的权限。您需要以管理员身份启动 cmd,然后执行您的命令。您可以使用以下代码Process p = Runtime.getRuntime().exec("cmd /c start runas /user:domain\\administrator /savecred:try.txt cmd");

标签: java file java-io


【解决方案1】:

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

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

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

//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 以确定您正在运行的环境并根据该环境构建正确的路径。

【讨论】:

    【解决方案2】:

    先取消隐藏文件:

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

    【讨论】:

    • 这不是所有选项中最好的,但可能是唯一的解决方法,因为这似乎是 JVM 中的一个错误。 隐藏≠只读并将隐藏文件视为只读是完全错误的。
    猜你喜欢
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2011-01-28
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多