Java 在Jar位置保存文件

Java 在Jar位置保存文件,java,command-line,jar,path,Java,Command Line,Jar,Path,我想将文件保存在与应用程序jar文件位于同一位置的文件夹中。我正试图通过以下方式实现这一目标: private String checkFolder() throws URISyntaxException { String path=new File(MigrationsApplication.class.getProtectionDomain().getCodeSource().getLocation() .toURI()).getPath(

我想将文件保存在与应用程序jar文件位于同一位置的文件夹中。我正试图通过以下方式实现这一目标:

  private String checkFolder() throws URISyntaxException {
        String path=new File(MigrationsApplication.class.getProtectionDomain().getCodeSource().getLocation()
                .toURI()).getPath()+"\\MigrationFiles";
        System.out.println("PATH2:"+path);
        File file=new File(path);
        if(!file.exists()){
            boolean folderCreated = file.mkdir();
            if(folderCreated){
                System.out.println("The folder MigrationFiles was created");
            }
        }
        return path;
    }
如果我从Intellij运行项目,返回的路径是
C:\Users\fabio\OneDrive\Ambiente de Trabalho\Migrations\target\classes\
,如果我从命令行运行它,返回的路径是
\Users\fabio\OneDrive\Ambiente de Trabalho\Migrations\out\artifacts\Migrations\u jar\Migrations.jar

. 这应该发生吗?另外,如何将jar路径仅返回到
\artifacts\Migrations\u jar

本质上,
.jar
文件是绑定的
目录

您可以测试返回的值是否是目录,如果是,则删除文件名

Path p = Path.of(path);
if(! p.isDirectory()) {
    p = p.getParent();
}
return p.toString();

本质上,
.jar
文件是捆绑的
目录

您可以测试返回的值是否是目录,如果是,则删除文件名

Path p = Path.of(path);
if(! p.isDirectory()) {
    p = p.getParent();
}
return p.toString();

如果它是一个目录,或者它不是,我应该去掉这个名称吗?让我看看我是否理解。在您给出的示例中,如果我使用IDE,我将获得类的正常路径,但如果我使用命令行,我将获得jar位置之前的文件夹?我得到一个错误,因为路径是非静态方法,我没有测试代码。好消息是它有100%的退款保证。您可以在这里找到文档:如果路径不是目录,那么可能是jar文件。您当前的方法要么找到classes目录,要么找到一个jar文件。这应该会给你一个目录。如果它是目录或者不是目录,我应该去掉它的名字吗?让我看看我是否理解。在您给出的示例中,如果我使用IDE,我将获得类的正常路径,但如果我使用命令行,我将获得jar位置之前的文件夹?我得到一个错误,因为路径是非静态方法,我没有测试代码。好消息是它有100%的退款保证。您可以在这里找到文档:如果路径不是目录,那么可能是jar文件。您当前的方法要么找到classes目录,要么找到一个jar文件。这应该会给你一个目录。