我正在尝试访问包含我的类的jar中的资源。
本网站上有一些问题显示如何,但不是其中一个有效。
我的代码是:
package nl.joshuaslik.UFMReckoning;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
System.out.println(getFile("file/test.txt"));
}
private static String getFile(String fileName) {
StringBuilder result = new StringBuilder("");
// Get file from resources folder
ClassLoader classLoader = App.class.getClassLoader();
File file = new File(classLoader.getResource(fileName).getFile());
System.out.println(classLoader.getResource(fileName).getPath());
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
result.append(line).append("\n");
}
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
return result.toString();
}
}
我的目录布局是:
classes
├── nl
| └── joshuaslik
| └── UFMReckoning
| └── App.class
└── file
└── test.txt
此代码运行正常,而不是在jar中。
然而,它在罐子里面不起作用。
UFM-Reckoning-0.0.0-alpha.0.jar
├── nl
| └── joshuaslik
| └── UFMReckoning
| └── App.class
├── META-INF
| └── MANIFEST.MF
└── file
└── test.txt
可以看到它尝试访问的文件是:file:/D:/Joshua/Git/Coding/UFM-Reckoning/build/UFM-Reckoning-0.0.0-alpha.0.jar!/file/test.txt
,这对我来说似乎是一条奇怪的路径,因为其中有!
,这在Windows上是不允许的。
MANIFEST.MF的内容
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Joshua
Created-By: Apache Maven 3.2.3
Build-Jdk: 1.8.0_25
Main-Class: nl.joshuaslik.UFMReckoning.App
有人知道如何解决这个问题吗?
我正在使用Windows 7 64位和Maven进行编译。
答案 0 :(得分:0)
您是否尝试过classloader.getResourceAsStream()方法?