如何在Java中获取当前工作目录?
假设我在.如何让我的程序显示它在?C:\Users\Justian\Documents\
C:\Users\Justian\Documents
硬编码不是一种选择 - 如果它被移动到另一个位置,它需要适应性强。
我想在文件夹中转储一堆CSV文件,让程序识别所有文件,然后加载数据并操作它们。我真的只是想知道如何导航到该文件夹。
假设我在.如何让我的程序显示它在?C:\Users\Justian\Documents\
C:\Users\Justian\Documents
硬编码不是一种选择 - 如果它被移动到另一个位置,它需要适应性强。
我想在文件夹中转储一堆CSV文件,让程序识别所有文件,然后加载数据并操作它们。我真的只是想知道如何导航到该文件夹。
一种方法是使用系统属性,这将为您提供“初始化属性时的当前工作目录”。这可能是你想要的。找出发出命令的位置,在您的情况下,在包含要处理的文件的目录中,即使实际的.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 Test
current dir = /User/me
您还应该使用一个好的面向对象的命令行参数解析器作为奖励。我强烈推荐JSAP,Java Simple Argument Parser。这将允许您使用并交替传递其他内容来覆盖该行为。更易于维护的解决方案。这将使传入目录以处理非常容易,并且能够在没有传入任何内容时回退。System.getProperty("user.dir")
user.dir
使用 CodeSource#getLocation()
。这在 JAR 文件中也工作正常。您可以通过ProtectionDomain#getCodeSource()
获得,而Class#getProtectionDomain()
又可以获得。CodeSource
ProtectionDomain
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()