找到专用应用程序文件夹的位置

时间:2016-02-14 06:02:03

标签: java file

我很抱歉,如果这个标题命名错误,我无法想出一个更好的方式来表达它,所以欢迎编辑。

我见过的大多数需要硬盘驱动器文件存储的应用程序会根据操作系统在合适的位置创建一个文件夹。在Windows上这些文件夹位于\ Users \ [current user] \ AppData \ [etc],在Mac上这些文件夹位于/ Users / [current user] / Library / Application Support / [etc],Ubuntu有类似的东西我现在无法想到。

我想知道,这些文件路径在不同用户的不同操作系统中是如何一致的,至少在java中,是否有一种简单的方法可以实现这一目标?

谢谢。

2 个答案:

答案 0 :(得分:4)

应该有,但没有。我甚至提交了一个关于它的bug / RFE,但据我所知,它从未被接受过。这是我使用的:

class Test:
    def __enter__(self):
        self._cm_obj = self._cm()
        self._cm_obj.__enter__()

    def __exit__(self, exc_type, exc_val, exc_tb):
        return self._cm_obj.__exit__(exc_type, exc_val, exc_tb)

    @contextmanager
    def _cm(self):
        print('---- enter')
        try:
            yield
        except:
            raise  # comment to suppess exception
            pass
        finally:
            print('---- exit')


with Test():
    raise Exception(123)

一些注意事项:

我不确定旧Windows版本的代码是否必要,因为Java 8不能在Windows XP上运行。

The XDG Directory Specification说“在这些环境变量中设置的所有路径必须是绝对的。如果某个实现在任何这些变量中遇到相对路径,它应该认为该路径无效并忽略它。“

答案 1 :(得分:0)

可以使用方法

找到目录
static String defaultDirectory() {
    String os = System.getProperty("os.name").toLowerCase();
    if (OS.contains("win"))
        return System.getenv("APPDATA");
    else if (OS.contains("mac"))
        return System.getProperty("user.home") + "/Library/Application Support";
    else if (OS.contains("nux"))
        return System.getProperty("user.home");
    else
        return System.getProperty("user.dir");
}

值得注意的是,在Linux上,任何此类文件夹都应通过以.

开头来隐藏

CodeBunny上的用户Denis Tulskiythis post发现了答案)