我的src / main / resources文件夹中有一个文件,我正在通过库函数传递该文件的位置,但未读取该文件。
这是反战时文件夹结构的外观
我的src / main / resources文件夹中有一个文件(Intuit.cto.gateway.aws.preprod.jks),我正在传递该库文件的位置,但未读取该文件。
当我创建一个简单的Maven项目并尝试执行相同操作时,我能够从src / main / resources访问文件 当我反编译我的示例项目时,它看起来像这样
要访问该文件,我正在使用以下代码:
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();
}
如何解决这个问题?
答案 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,则该路径始终是绝对路径,并且应在前面不加/
的情况下编写路径。