Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在maven项目结构中正确导入文件?_Java_File_Maven_Resources_Classloader - Fatal编程技术网

Java 如何在maven项目结构中正确导入文件?

Java 如何在maven项目结构中正确导入文件?,java,file,maven,resources,classloader,Java,File,Maven,Resources,Classloader,我有一个xml格式的配置文件,需要加载到java代码中。在测试过程中,我已经通过它的绝对URL导入了它,但是现在我要将项目编译并部署为一个jar,这将不再有效 根据以前的经验,我认为正确的方法是使用类加载器,但是我遇到了一些困难。也许是因为我的项目设置,我不知道。我想我能够像过去一样完成这项工作,但我真的想确保我以标准、常规和/或正确的方式完成,这样我就不需要每次都进行实验 以下是我尝试实现的代码: 但是,该代码: ClassLoader classLoader = getClass().get

我有一个xml格式的配置文件,需要加载到java代码中。在测试过程中,我已经通过它的绝对URL导入了它,但是现在我要将项目编译并部署为一个jar,这将不再有效

根据以前的经验,我认为正确的方法是使用类加载器,但是我遇到了一些困难。也许是因为我的项目设置,我不知道。我想我能够像过去一样完成这项工作,但我真的想确保我以标准、常规和/或正确的方式完成,这样我就不需要每次都进行实验

以下是我尝试实现的代码:

但是,该代码:

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("file/test.xml").getFile());
我无法使用,因为需要抽象类的静态方法中的文件。因此,我用以下代码将其关闭:

ClassLoader classLoader = XmlConfigLoader.class.getClassLoader();
File file = new File(classLoader.getResource("configuration.xml").getFile());
XmlConfigLoader是包含类
“configuration.xml”
位于
src/main/resources
-文件夹中,就像示例中的
“file/test.xml”
一样

我在调试模式下运行了代码,发现
文件
的路径错误。它没有查看
src/main/resources
,而是指向
target/classes

  • 是否有需要设置的默认资源文件夹的设置选项
  • src/main/resources是像这样存储文件的常规位置吗
  • 在此设置中,我加载类加载器的方式正确吗
  • 作为补充信息,这是一个Maven项目

    更新:


    除了一个bug之外,我当前的代码实际上工作得很好。文件在编译时自动传输到
    目标/classes
    文件夹。但是,url中的空白被替换为
    %20
    ,我必须手动将其更改回,以使系统找到该文件。我相信有更好的解决办法。有人吗?

    文件的路径是“target/classes”,因为这是jar清单文件中的类路径。如果您想让它查看其他地方,请编辑清单文件并将资源类路径附加到它

    关于如何在上更改jar的类路径,有更多详细信息


    在使用maven时,最简单的方法是将资源文件放入src/main/resources/META-INF目录,maven将为您排序。请看

    据我所知,进入目标文件夹的所有内容都是编译代码,对吗?所以我不应该手动将某些内容添加到目标文件夹,或者?当我编译和运行代码时,我发现该文件可能在其他地方,与它在我的开发环境中的位置相比,但正如我在问题中所说的,我不是在寻找更多可能的选项,而是在寻找解决我的问题的常规标准解决方案。因此,如果这是标准方法,我可能需要调整清单文件。是吗?在我看来,目标文件夹是您将想要在目标系统上结束的内容(在本例中是您的jar文件)放在其中的地方,因此我会毫不犹豫地为此创建一个target/resources目录。但是,当您使用maven时,最简单的方法是将资源文件放入src/main/resources/META-INF目录,maven将为您进行排序。请参阅…作为旁注,我现在可以看到我的configuration.xml文件实际上是自动传输到目标/类的。只是它不会在eclipse中显示。显然,系统确实找到了文件,但不知何故它没有读取它。。。我会进一步调查。。。到目前为止,我还没有在我的目标中手动添加任何内容。当maven执行编译操作时,jar被生成并放置到该文件夹中。我更新了我的答案,以包含我之前评论的内容。问题中的原始解决方案实际上有效,除了一件事:文件路径包含一个带有空白字符的文件夹,该文件夹被
    %20
    替换。我手动将它们重新格式化为空白,瞧!但这不可能是我们想要的方法吗???