【问题标题】:How do I get write permissions in the home folder (or the appdata folder, for windows) in Java?如何在 Java 的主文件夹(或 Windows 的 appdata 文件夹)中获得写权限?
【发布时间】:2012-11-18 14:19:09
【问题描述】:

我试图在 home/appdata 文件夹中保存一些用户设置,但是当我使用 dir.canwrite() 时它返回 false。这是我用来确定 home/appdata 文件夹的代码:

public static String getAppDataPath() {
    if (System.getProperty("os.name").contains("Windows")) {
        return System.getenv("APPDATA");
    } else {
        return getUnixHome();
    }
}

public static String getUnixHome() {
    String home = System.getProperty("user.home");
    return home != null ? home : "~";
}

这是试图 mkdir 的代码:

public static boolean checkExistenceDir(String path) {
    File dir = new File(path);
    if(!dir.exists()) {
        dir.mkdir();
    }
}

有问题的路径是:

getAppDataPath() + ".foo" + File.separatorChar

【问题讨论】:

    标签: java permissions io


    【解决方案1】:

    您需要以管理员身份启动 Java 进程。

    You can create a run.vbs script in Windows to start your jar:

    Set oShell = CreateObject("Shell.Application")
    oShell.ShellExecute "cmd.exe", , , "runas", 1
    oShell.Run "java -jar myjar.jar"
    

    要使程序始终以管理员身份运行,您需要它至少以管理员身份运行一次并更新注册表项。

    【讨论】:

    • 每次?我知道 Java 应用程序(例如我的世界)不会在其中启动并且它们可以完成工作。这里有什么区别?
    • @EvertVP - 大概,Minecraft 是由一个脚本或自定义启动器启动的,它与上述功能相同。但关键是,你不能在纯 Java 中做到这一点。
    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多