【发布时间】:2019-11-26 06:24:57
【问题描述】:
我有一个包含 jar 文件中文件列表的包。这个想法是找到包中的所有文件并读取每个文件的内容。
private static final String DATA_DIRECTORY = "this/is/my/package/containing/data/";
try {
URL url = this.getClass().getClassLoader().getResource(DATA_DIRECTORY);
if (url.toExternalForm().startsWith("jar:")) {
try (BufferedReader in = new BufferedReader(
new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream(DATA_DIRECTORY)))) {
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
}
} else {
try (BufferedReader in = new BufferedReader(
new InputStreamReader(url.openStream()))) {
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
}
}
} catch (Exception e) {
System.out.println(e);
}
Windows 结果
[Path] -> file:/D:/path/to/application/lib/my-jarfile.jar!/this/is/my/package/containing/data/
[Files] ->
b2b
b2c
bal
c2b
olp
olq
reg
rev
stat
Linux 结果
[Path] -> jar:file:/path/to/application/lib/my-jarfile.jar!/this/is/my/package/containing/data/
[Files] -> []
[available bytes] -> 0
在 Windows 中它运行良好,但在 Linux 中它失败了,它显示 Inputstream 有 0 个字节可用,我想知道为什么。我尝试了几种解决方案,但似乎都没有给我想要的结果。我哪里出了问题?
【问题讨论】:
-
您尝试访问的驱动器是否已安装?
-
@SachinBahukhandi 是的
-
是否有权限访问该文件夹。
-
尝试使用 sudo 运行命令 javac
-
应用在su中运行,文件夹有rw权限。
标签: java package classpath classloader urlclassloader