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

如何在Java中获取当前工作目录?,java,path,working-directory,Java,Path,Working Directory,假设我的主类位于C:\Users\Justian\Documents\。如何让我的程序显示它在C:\Users\Justian\Documents中 硬编码不是一种选择——如果它被移动到另一个位置,它需要适应 我想将一堆CSV文件转储到一个文件夹中,让程序识别所有文件,然后加载数据并对其进行操作。我真的只是想知道如何导航到那个文件夹。谁说你的主类在本地硬盘上的文件中?类通常捆绑在JAR文件中,有时通过网络加载,甚至动态生成 那么你到底想做什么呢?可能有一种方法可以做到这一点,即不必假设类来自何处

假设我的主类位于
C:\Users\Justian\Documents\
。如何让我的程序显示它在
C:\Users\Justian\Documents

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


我想将一堆CSV文件转储到一个文件夹中,让程序识别所有文件,然后加载数据并对其进行操作。我真的只是想知道如何导航到那个文件夹。

谁说你的主类在本地硬盘上的文件中?类通常捆绑在JAR文件中,有时通过网络加载,甚至动态生成

那么你到底想做什么呢?可能有一种方法可以做到这一点,即不必假设类来自何处。

使用。这在JAR文件中也可以很好地工作。您可以通过获得
CodeSource
,而
ProtectionDomain
又可以通过获得


根据OP的评论更新


我想将一堆CSV文件转储到一个文件夹中,让程序识别所有文件,然后加载数据并对其进行操作。我真的只是想知道如何导航到那个文件夹

这需要硬编码/了解它们在程序中的相对路径。而是考虑将其路径添加到类路径中,这样就可以使用<代码>类加载器→GETRealSeCe()/<代码> < /P>
或者将其路径作为
main()
参数传递。

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

下面将打印出调用命令的当前目录,而不管.class文件所在的.class或.jar文件位于何处

public class Test
{
    public static void main(final String[] args)
    {
        final String dir = System.getProperty("user.dir");
        System.out.println("current dir = " + dir);
    }
}  
如果您位于
/User/me/
中,并且包含上述代码的.jar文件位于
/opt/some/nested/dir/
命令
java-jar/opt/some/nested/dir/test.jar test
将输出
current dir=/User/me

另外,您还应该考虑使用一个好的面向对象命令行参数解析器。 我强烈推荐Java简单参数解析器。这将允许您使用
System.getProperty(“user.dir”)
,或者传入其他内容来克服这种行为。更易于维护的解决方案。这将使传递目录以进行处理变得非常容易,并且如果没有传递任何内容,则可以求助于
user.dir

File currentDirectory = new File(new File(".").getAbsolutePath());
System.out.println(currentDirectory.getCanonicalPath());
System.out.println(currentDirectory.getAbsolutePath());
打印如下内容:

/path/to/current/directory
/path/to/current/directory/.

请注意,
File.getCanonicalPath()
抛出一个选中的IOException,但它将删除类似于
。/../../

的内容。如果您想要当前源代码的绝对路径,我的建议是:

this.getClass().getClassLoader().getResource("").getPath()
String internalPath = this.getClass().getName().replace(".", File.separator);
String externalPath = System.getProperty("user.dir")+File.separator+"src";
String workDir = externalPath+File.separator+internalPath.substring(0, internalPath.lastIndexOf(File.separator));
我刚才用过:

import java.nio.file.Path;
import java.nio.file.Paths;


如果要获取当前工作目录,请使用以下行

System.out.println(new File("").getAbsolutePath());

我想将一堆CSV文件转储到一个文件夹中,让程序识别所有文件,然后加载数据并对其进行操作。我真的只是想知道如何导航到那个文件夹。也许我遗漏了什么,但似乎一个绝对路径可以工作。你说你不能硬编码,但是你怎么知道从哪个文件夹开始查找呢?问题是我想把它带到其他计算机上,而不仅仅是我自己的计算机上。我看不出硬编码路径有多有效。“假设我的jar和文件夹总是有类似的关系(即在同一个目录中)。如果这是真的,我可以得到jar的目录,然后修改它以找到文件夹。”我可以硬编码的唯一方法是不必包含从硬盘到文件的完整路径。也许我可以只返回3个文件夹(即“Documents\Project\Dump\[file/folder]”),我想说的是,您要做的是获得jar文件所在目录的句柄。这能满足你的要求吗?+1。实现这一目标有几个条件;最重要的是,您的“主类”是从文件系统加载的。在Java中,这种假设是错误的并不罕见。但是,如果您确定是从文件系统上的JAR加载类,那么这就是有效的方法。我正在尝试编译我的JAR,但目前这是一个单独的问题。如果你认为你能帮上忙,请查看:。我敢肯定,张贴这是一种违反某种形式,但它与这个问题有关。如果我能解决这个问题,这肯定是我的答案。为什么我需要硬编码呢?我以前也做过类似的事情。假设我的jar和文件夹总是有相似的关系(即在同一个目录中)。如果这是真的,我可以得到jar的目录,然后修改它以找到文件夹。如果它和jar文件在同一个文件夹中,那么它就已经在类路径中了。“硬编码”这个词有点夸张,我的意思是“知道它们相对于JAR文件的路径”。@Moebius:Huh?你是Java新手吗。只需使用
getLocation()
方法返回的方法即可。其他的显然不行。我会在可能的时候测试一下。我真的很关注.jar问题:Pdid您可以访问我对.jar问题的回答中的链接,在这里我展示了如何使用ANT构建.jar文件?Jarrod中的代码从系统属性
user.dir
返回当前工作目录的绝对路径非常容易使用。System.getProperty(“user.dir”);看看。如果您的主类位于jar文件中,该怎么办?那么你想要什么样的结果呢?你为什么还要这样做呢?听起来就像你所说的
import java.nio.file.Path;
import java.nio.file.Paths;
Path workingDirectory=Paths.get(".").toAbsolutePath();
System.out.println(new File("").getAbsolutePath());