Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 此.getClass().getResource(";).getFile()返回路径为;档案:";在开始使用IntelliJ/Jetty 8.1.14运行项目时_Java_Eclipse_Jakarta Ee_Intellij Idea_Jetty - Fatal编程技术网

Java 此.getClass().getResource(";).getFile()返回路径为;档案:";在开始使用IntelliJ/Jetty 8.1.14运行项目时

Java 此.getClass().getResource(";).getFile()返回路径为;档案:";在开始使用IntelliJ/Jetty 8.1.14运行项目时,java,eclipse,jakarta-ee,intellij-idea,jetty,Java,Eclipse,Jakarta Ee,Intellij Idea,Jetty,我正在尝试将我的开发环境从Eclipse切换到IntelliJ。我正在开发一个Java EE应用程序,它使用从这个.getClass().getResource(“”.getFile()返回的路径来创建一个新的FileInputStream。在使用Eclipse/Jetty(来自Eclipse marketplace上的Jetty插件)运行项目和使用Glassfish进行生产时,返回的字符串类似于“/C:/path/to/class/in/jar/” 但是,当使用IntelliJ/Jetty(8

我正在尝试将我的开发环境从Eclipse切换到IntelliJ。我正在开发一个Java EE应用程序,它使用从这个.getClass().getResource(“”.getFile()返回的路径来创建一个新的FileInputStream。在使用Eclipse/Jetty(来自Eclipse marketplace上的Jetty插件)运行项目和使用Glassfish进行生产时,返回的字符串类似于“/C:/path/to/class/in/jar/”

但是,当使用IntelliJ/Jetty(8.*from)运行项目时,返回的文件路径看起来像“file:/C:/path/to/class/in/jar/”。字符串开头的“file:”导致“new FileInputStream(path)”上出现FileNotFoundException

我正在Windows8上开发


我可以很容易地从字符串中去掉“file:”,但我宁愿不更改代码库来修复似乎是环境问题的东西。我能做些什么,使getFile()不返回以“file:”开头的路径吗?

我找到了答案。应用程序正在将其中一个子项目部署到jar文件而不是文件夹中。由于某种原因,这导致
URL#getFile()
附加了“file:”协议。为了解决这个问题,我进入模块设置>工件>分解模块,将子项目的编译输出从jar文件移动到一个文件夹。

我想我已经取得了一些进展。IntelliJ正在部署到目标文件夹中的.jar文件中。Eclipse正在部署到target/classes文件夹,没有jar文件。我如何配置IntelliJ来执行同样的操作?如果您希望
URL\getFile()
返回一个文件名,那么您犯了严重错误。您不能保证从
Class 35; getResource(String)
返回的URL指向文件系统中的实际文件。在初始化FileInputStream之前,文件名将附加到
URL#getFile()
返回的路径。我应该指定它。要添加,来自
URL#getFile()
的路径在“com”上拆分,com是包的根目录。然后追加所需文件夹/文件的名称,并使用新路径初始化FileInputStream。我愿意找到更好的方法。如果它让我看起来更好一点的话,这是我正在调试的一个大型企业应用程序的一部分,我没有做最初的实现。这只是一个变通办法,不是最佳解决方案。就像@jarnbjo在他的评论中提到的,你的方法是不可移植的,你是正确的。在修改一个pom.xml文件后,我已经遇到了重置工件的问题。