在资源文件夹中找不到文件

时间:2019-07-18 12:21:12

标签: java

我的src / main / resources文件夹中有一个文件,我正在通过库函数传递该文件的位置,但未读取该文件。

这是反战时文件夹结构的外观

我的src / main / resources文件夹中有一个文件(Intuit.cto.gateway.aws.preprod.jks),我正在传递该库文件的位置,但未读取该文件。

这是反编译战争时文件夹结构的外观。 enter image description here

当我创建一个简单的Maven项目并尝试执行相同操作时,我能够从src / main / resources访问文件 当我反编译我的示例项目时,它看起来像这样 here i am able to access this file

要访问该文件,我正在使用以下代码:

 public static void main(String args[])throws Exception{    
          FileReader fr=new FileReader("src/main/resources/filename");    
          int i;    
          while((i=fr.read())!=-1)    
          System.out.print((char)i);    
          fr.close();    
    }     

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您无法按照自己的方式做。

您的路径很可能不正确。解压缩您的*.war文件,发现src/main不再存在。

如果war文件未爆炸,则无法仅使用传递到File*类的路径来访问其内容,因为您的文件被打包为压缩到具有文件扩展名的ZIP文件中的标准位置中战争。

如果目的地需要File或传递到FileReader的路径,则必须从WAR文件中读取此文件(使用ClassLoader.getResourceAsStream())并将其复制到一个临时位置,例如File.createTempFile()System.getProperty("java.io.tmpdir")

答案 1 :(得分:1)

资源(在类路径上)不一定是文件系统文件。如果用法不能仅处理InputStream,则需要创建一个临时文件。

Path tempFile = Files.createTempFile("phoneid-", ".jks");
InputStream res = getClass().getResourceAsStream("/Intuit/gateway/preProd.jks");
// Case-sensitive, absolute path on the class path.
Files.copy(res, tempFile);
// Maybe:
//tempFile.toFile().deleteOnExit();

String param = tempFile.toString();

(getResource / getResourceAsStream的结果null表示错误的路径。)

部分解决方案是检查资源的URL,是否具有“ file:”协议,而不是“ jar:file:”(以zip格式打包,例如jar,ear或war)。 / p>

URL url getClass().getResource("/Intuit/gateway/preProd.jks");

对于一个类,路径可以相对于类包目录,也可以是绝对(“ / ...”)。如果改用ClassLoader,则该路径始终是绝对路径,并且应在前面不加/的情况下编写路径。