gpt4 book ai didi

java - [Class].class.getResourceAsStream(...) 在某些目录中的 JAR 文件中使用时返回 null?

转载 作者:行者123 更新时间:2023-11-29 08:59:10 25 4
gpt4 key购买 nike

我有一个很奇怪的问题。从 JAR 文件内部加载资源似乎有时有效,有时无效。

Jar 文件仅包含类文件、 list 和 test.txt

当我用 Eclipse 打包时,它通常运行良好(可以访问 test.txt 的内容)但是在某些目录中,Resourceproblem.class.getResourceAsStream("/test.txt") 返回 null - 尽管它是同一个 Jar 文件!

例如,当我双击 jar 文件 \\remotecomputer\folder\subfolder\test.jar 时,找不到 jar 文件中的 test.txt。但有时(?)当路径名很长且包含空格时(至少在 Windows XP SP3 上)也是如此。

有什么想法吗?

示例代码:

import java.io.*;

import javax.swing.*;

public class Resourceproblem {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Resourceproblem();
}
});
}

private Resourceproblem() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
JTextArea text = new JTextArea();
text.setEditable(false);
frame.add(text);
frame.setVisible(true);

try {
InputStream in = Resourceproblem.class.getResourceAsStream("/test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
br.close();
in.close();
text.setText(line);
} catch(Exception ex) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
pw.flush();
String s = sw.toString();
pw.close();
ex.printStackTrace();
text.setText(s);
}
}
}

test.txt 只是一个文本文件,其中有一行用于检查加载是否成功。

最佳答案

我有一个想法,但我不太确定我知道你的问题是什么。

我多次使用 eclipse 从您的示例源创建一个 jar 文件;我使用 Win7 将 jar 文件存储在 c:\local 和 c:\local\one\two three\four 中。

我不熟悉在 getResourceAsStream() 调用中在资源文件名前面使用“/”。您的示例程序在每种情况下都可以使用或不使用“/”,但我建议删除它并查看是否可以解决您的问题。在这种情况下,该文件与访问它的类位于同一目录中。

我本以为“/”会导致程序在文件系统的根目录下寻找文件,但是这似乎并没有发生......

关于java - [Class].class.getResourceAsStream(...) 在某些目录中的 JAR 文件中使用时返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18549230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com