Java Can';使用JAR文件时找不到路径

Java Can';使用JAR文件时找不到路径,java,spring-boot,file,jar,Java,Spring Boot,File,Jar,我正在尝试将文件存储在特定文件夹中。如果我使用参数通过Intelli J运行该程序,它将完全正常工作,并且文件将在所需的文件夹中创建。但是如果我通过命令行(JAR文件)运行程序,我会得到一个文件未找到异常(系统找不到指定的路径) 我认为这是因为从JAR文件到要存储文件的文件夹的路径与从主类到文件夹的路径不同 我怎样才能解决这个问题 文件生成方法 项目结构 如果您运行的是jar,则没有src/main目录。 在maven构建jar时,该目录中的所有内容都将放入jar中 使用绝对路径或写入临时目录,

我正在尝试将文件存储在特定文件夹中。如果我使用参数通过Intelli J运行该程序,它将完全正常工作,并且文件将在所需的文件夹中创建。但是如果我通过命令行(JAR文件)运行程序,我会得到一个文件未找到异常(系统找不到指定的路径)

我认为这是因为从JAR文件到要存储文件的文件夹的路径与从主类到文件夹的路径不同

我怎样才能解决这个问题

文件生成方法 项目结构

如果您运行的是jar,则没有
src/main
目录。 在maven构建jar时,该目录中的所有内容都将放入jar中


使用绝对路径或写入临时目录,或将目录设置为可配置的

您看起来像是要将文件保存为资源。资源应被视为只读。而
src/main/resources/db/changelog/…
是根据工作目录解析的相对路径。它不能是只读的。它为迁移生成一个模板,该模板应该填充好,因为资源是只读的。没有用于写入资源的API。最终,您的代码试图写入JAR文件“旁边”的文件,而不是JAR文件中的文件。但是
src/main/resources/db/changelog
目录不存在,除非您的工作目录是项目目录。当然,您可以在任何工作目录中创建该目录,但您的用户可能不喜欢。您如何处理该文件?它只被你的程序使用吗?或者用户需要与之交互吗?此文件是liquibase迁移的模板。它必须填写,但我的绝对路径不同于其他人的个人绝对路径临时目录方法如何工作?为了使迁移工作,它们必须位于我存储它们的文件夹中(这就是liquibase的工作方式),但不能存储到不存在的目录中
 public void generateMigrationFile(String fileName) throws IOException {
        Document migrationDocument=new Document();

        Namespace namespace = Namespace.getNamespace("http://www.liquibase.org/xml/ns/dbchangelog");
        Element databaseChangelogElement = new Element("databaseChangeLog", namespace);
        Namespace XSI = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
        databaseChangelogElement.addNamespaceDeclaration(XSI);
        databaseChangelogElement.setAttribute("schemaLocation", "http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd", XSI);

        Element changeSetElement=new Element("changeSet",namespace);
        changeSetElement.setAttribute("author","");
        changeSetElement.setAttribute("id",UUID.randomUUID().toString());
        databaseChangelogElement.addContent(changeSetElement);

        migrationDocument.setRootElement(databaseChangelogElement);
        
        XMLOutputter outter=new XMLOutputter();
        outter.setFormat(Format.getPrettyFormat());
        outter.output(migrationDocument, new FileWriter(new File("src\\main\\resources\\db\\changelog\\"+fileName+".xml")));

        System.out.println("Migration file generated successfully");
    }