如何在Java中获取当前工作目录?

2022-08-31 09:00:04

假设我在.如何让我的程序显示它在?C:\Users\Justian\Documents\C:\Users\Justian\Documents

硬编码不是一种选择 - 如果它被移动到另一个位置,它需要适应性强。

我想在文件夹中转储一堆CSV文件,让程序识别所有文件,然后加载数据并操作它们。我真的只是想知道如何导航到该文件夹。


答案 1

一种方法是使用系统属性,这将为您提供“初始化属性时的当前工作目录”。这可能是你想要的。找出发出命令的位置,在您的情况下,在包含要处理的文件的目录中,即使实际的.jar文件可能位于计算机上的其他位置。在大多数情况下,拥有实际.jar文件的目录并不那么有用。System.getProperty("user.dir");java

下面将打印出从中调用命令的当前目录,无论.class或.jar文件位于.class文件所在的位置。

public class Test
{
    public static void main(final String[] args)
    {
        final String dir = System.getProperty("user.dir");
        System.out.println("current dir = " + dir);
    }
}  

如果您在 中并且包含上述代码.jar文件位于命令中,则输出 ./User/me//opt/some/nested/dir/java -jar /opt/some/nested/dir/test.jar Testcurrent dir = /User/me

您还应该使用一个好的面向对象的命令行参数解析器作为奖励。我强烈推荐JSAP,Java Simple Argument Parser。这将允许您使用并交替传递其他内容来覆盖该行为。更易于维护的解决方案。这将使传入目录以处理非常容易,并且能够在没有传入任何内容时回退。System.getProperty("user.dir")user.dir


答案 2

使用 CodeSource#getLocation()。这在 JAR 文件中也工作正常。您可以通过ProtectionDomain#getCodeSource()获得,而Class#getProtectionDomain()又可以获得。CodeSourceProtectionDomain

public class Test {
    public static void main(String... args) throws Exception {
        URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
        System.out.println(location.getFile());
    }
}

根据OP的评论进行更新

我想在文件夹中转储一堆CSV文件,让程序识别所有文件,然后加载数据并操作它们。我真的只是想知道如何导航到该文件夹。

这需要硬编码/了解它们在程序中的相对路径。而是考虑将其路径添加到类路径中,以便您可以使用ClassLoader#getResource()

File classpathRoot = new File(classLoader.getResource("").getPath());
File[] csvFiles = classpathRoot.listFiles(new FilenameFilter() {
    @Override public boolean accept(File dir, String name) {
        return name.endsWith(".csv");
    }
});

或者将其路径作为参数传递。main()


推荐