Java 在Jar位置保存文件
我想将文件保存在与应用程序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(
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文件。这应该会给你一个目录。