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

getClassLoader(). getResources("filename"). getFile()在文件路径中包含JAR文件名

能业
2023-03-14

我正在更新一个系统,以满足客户的额外要求。这是一个运行在java 1.4.2上的旧系统,使用maven和jdk 1.50_11编译。

系统的一部分是加载属性文件。使用的语法是:

String fileName = "MyClass".class.getClassLoader().getResource("MyFile.txt").getFile();
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(fileName);

我没有对代码做任何更改。但是,当我在Linux中部署jar文件时,它创建了一个不正确的文件路径。目前,我的文件。txt与编译的jar位于同一文件夹中,上面的代码从旧jar获得正确的文件路径。但是,对于新编译的jar文件,MyFile的生成文件路径为。txt在文件路径中包含Jar的名称。请参阅下面的更多解释。

假设编译的Jar是CompiledJarv01.jar并部署在 /Apps/myJar文件夹中(MyFile.txt也在里面),MyFile.txt的完整文件路径是

旧JAR文件: /Apps/myJar/MyFile.txt

新JAR文件:/Apps/myJar/CompiledJarv01。罐子/我的文件。文本

我不知道为什么Jar文件名包含在我的文件中。txt文件路径。这会在运行应用程序时导致FileNotFoundException。

共有1个答案

堵宏毅
2023-03-14

您可以尝试以下方法

File resource = new File("MyClass".class.getClassLoader().getResource("MyFile.txt").getFile());
String fileName = resource.getName();
File compiledJar = resource.getParentFile();
File newResource = new File(compiledJar.getParentFile(), filename);
System.out.println("The file you want (Hope so, I got no IDE): " + newResoruce.toString());
 类似资料:
  • 问题内容: 我记得前一段时间使用eclipse或netbeans时,我能够轻松地将源文件包含在jar文件中。我已移至intellij 10社区版,发现自己需要做同样的事情。有什么提示吗? 问题答案: 我想到了… 单击“输出布局”选项卡中的“ +”按钮->包含目录内容->选择您的src目录。做到了

  • 我有一个结构如下的maven项目: 我希望maven jar插件在构建jar文件时打包到数据库文件夹中。我尝试过包含这里概述的内容:https://maven.apache.org/plugins/maven-jar-plugin/examples/include-exclude.html,但它找不到目录“../database”(或../../database或../../../database

  • 问题内容: 我想将类文件包括在其他目录中,而不是主类的目录中。 如果我将这些目录放入它的属性中将不起作用。 为什么?除了将这些类打包到jar文件中,是否有其他解决方案? 问题答案: 如该链接中所述,必须使用斜杠: 类路径属性

  • 问题内容: 例如,我要压缩存储在/Users/me/Desktop/image.jpg中的文件 我做了这个方法: 但是,当我提取文件时,解压缩的文件具有完整路径。 我不希望zip中每个文件的完整路径,而只想要文件名。 我该怎么做? 问题答案: 这里: 您正在使用整个路径为该文件创建条目。如果仅使用名称(不带路径),则将具有所需的内容:

  • 请快速帮助我从jnlp文件下载jar文件,在缓存中下载的文件是随机命名的,而不是按照jnlp文件名,即它有像345546ACB-1DA47A98-1_2_3_4这样的名称,而不是jarone.jar,请使用正确的URL我需要用于下载下面代码的jar或如何获得在缓存文件夹中下载的jar文件的正确名称。我可以在java控制台中看到所有正确的jar名称,但不能从那里下载

  • 我正在尝试将我的开发环境从Eclipse切换到IntelliJ。我正在开发一个JavaEE应用程序,该应用程序使用从该应用程序返回的路径。getClass()。getResource(“”)。getFile()创建新的FileInputStream。在使用Eclipse/Jetty(来自Eclipse marketplace上的Jetty插件)运行项目和使用Glassfish进行生产时,返回的字符