当前位置: 首页 > 知识库问答 >
问题:

Java:运行JAR文件时如何获取文件路径

归誉
2023-03-14

当我使用相对路径时,我可以从Eclipse运行Java程序。但是,当我将其作为JAR文件运行时,该路径不再有效。在我的src/components/SettingsWindow中。我有:

ObjectInputStream ois=new ObjectInputStream(new FileInputStream("./src/file/profile.ser "));

我得到一个FileNotFound异常。

我的文件目录是这样的:文件目录

我所尝试的:

String filePath=this。getClass()。getResource(“/files/profile.ser”)。toString()

String filePath=this.getClass(). getResources("/file/profile.ser"). getPath();

String filePath=this。getClass()。getResource(“/files/profile.ser”)。getFile()。toString()

我只是把filePath放在new FileInputStream(filePath)中,但是这些都不起作用,我仍然得到一个FileNotFoundExc0019。当我System.out.println(filePath)它说:文件/profile.ser

我正在尝试获取src/files/profile的路径。当我在src/components/SettingsWindow中时,将执行ser。JAVA


共有2个答案

惠洛华
2023-03-14

要获取我使用的当前JAR文件路径:

public static String getJarFilePath() throws FileNotFoundException {
    String path = getClass().getResource(getClass().getSimpleName() + ".class").getFile();
    if(path.startsWith("/")) {
        throw new FileNotFoundException("This is not a jar file: \n"+path);
    }
    if(path.lastIndexOf("!")!=-1) path = path.substring(path.lastIndexOf("!/")+2, path.length());
    path = ClassLoader.getSystemClassLoader().getResource(path).getFile();

    return path.substring(0, path.lastIndexOf('!')).replaceAll("%20", " ");
}
慕项明
2023-03-14

您可以获取该类的URL:

        String path =                                                           
            String.join("/", getClass().getName().split(Pattern.quote(".")))    
            + ".class";                                                         
        URL url = getClass().getResource("/" + path);

这将产生"file:/path/to/pack/class.class"或"jar:/path/to/jar.jar!/package/class.class”。您可以使用URL或使用

            JarFile jar =                                                       
                ((JarURLConnection) url.openConnection()).getJarFile();

并使用jar。getName()获取要解析的路径以获取安装目录。

 类似资料:
  • 问题内容: 我的代码在一个JAR文件(例如)中运行,我需要在代码中知道正在运行的在哪个文件夹中。 因此,如果在中,无论我当前的工作目录是什么,我都希望获取该路径。 问题答案: 用班级名称替换“ MyClass”。 显然,如果从非文件位置加载你的类,这将做奇怪的事情。

  • 问题内容: 我的代码在一个JAR文件(例如foo.jar)中运行,我需要在代码中知道正在运行的foo.jar在哪个文件夹中。 因此,如果foo.jar在中C:\FOO\,无论我当前的工作目录是什么,我都希望获取该路径。 问题答案: 用你的类名称替换“ MyClass”。 显然,如果从非文件位置加载你的类,这将做奇怪的事情。

  • 问题内容: 我创建了一个JAR文件,如下所示: 我通过双击运行了这个JAR文件(它不起作用)。因此,我从DOS提示符运行了它,如下所示: 它引发了“无法加载主类”异常。所以我提取了这个JAR文件: 我运行了类文件: 运行良好。我不知道为什么JAR文件不起作用。请告诉我运行JAR文件的步骤 问题答案: 你需要在jar文件清单中指定Main-Class。 Oracle的教程包含完整的演示,但是这是从头

  • 我有一个Java/JavaFX项目,在那里我使用样式表。 样式表中的图像将按如下方式加载: 当我从Eclipse或SceneBuilder编译并运行它时,它加载良好。但是,当从cmd()运行jar文件时,它将文件名添加到路径,将其更改为: 显然没有加载它。如何获得正确的路径,或者从以某种方式jar生成的路径中省略jar?jar文件在包文件夹中,这里概述为。

  • 问题内容: 我被要求构建一个Java系统,该系统在运行时能够加载新代码(扩展)。我的代码运行时如何重新加载jar文件?或如何加载新的jar? 显然,由于持续的正常运行时间很重要,因此,我想增加在此过程中重新加载现有类的功能(如果这样做不会使事情复杂化)。 我应该注意什么?(将其视为两个不同的问题-一个关于在运行时重新加载类,另一个关于添加新类)。 问题答案: 用现有数据重新加载现有类可能会破坏事情

  • 问题内容: 我正在尝试获取资源的途径,但是我没有运气。 这是可行的(在IDE和JAR中都可以),但是这样一来,我无法获取文件的路径,只能获取文件内容: 如果我这样做: 结果是: 有没有办法获取资源文件的路径? 问题答案: 这是故意的。“文件”的内容可能无法作为文件使用。请记住,您正在处理的类和资源可能是JAR文件或其他类型的资源的一部分。类加载器不必为资源提供文件句柄,例如jar文件可能尚未扩展为