【发布时间】:2014-06-23 20:06:47
【问题描述】:
平台:使用 Eclipse IDE 的 Java SWT
在继续之前,我确实在 Stack Overflow 上看到了类似的问题,19035407。
来源:
package prjMyapp;
import java.io.InputStream;
public class Myapp
{
public static void main(String[] args)
{
InputStream oStream = Myapp.class.getResourceAsStream("resources/StarTrekLandruRocks.txt");
if (null == oStream)
System.out.println("input stream is null");
else
System.out.println("input stream is NOT null :-)");
}
}
文档放置
prjMyApp / src / prjMyApp
--> All .java files
--> resources
--> Non-image resources
--> images
--> Image resources (jpg, png)
有趣的笔记
我曾经使用 /prjMyapp/resources/whatever.txt 和 /prjMyapp/images/whatever.ext,但是在测试期间解决这个问题时,我意识到相对路径也可以工作,并且在视觉和其他方面都更好,因此“resources/StarTrekLandruRocks.txt”而不是之前的“/prjMyapp/resources/StarTrekLandruRocks.txt”。如前所述,图像,我有很多,在所有机器(甚至是 Mac)上都能按预期工作,但不是文本文件。
开发机器:
无论我做什么,我的开发机器都能完美地执行代码。
CENTOS 盒子
我的 CENTOS (Linux) 机器执行自包含的全包 jar 文件,为此我使用 ANT 创建文件。如果我将文本文件作为 png 扩展名,我可以加载文本文件,但我不能将文件作为 txt 扩展名加载,其他所有内容都一样。
是的,我知道永远不应该将 txt 文件重命名为 png 扩展名,但我很好奇会发生什么,因为我可以毫无问题地加载图像(jpg 和 png)。我发现 getSystemClassLoader 只是不喜欢 txt 扩展名。将扩展名重命名为 png 是一种黑客行为,无论出于何种原因,都会使该方法正常工作。
我宁愿不做黑客。
为什么 getSystemClassLoader 不能直接使用 txt 扩展名?根据另一篇文章应该,但不是在我的系统上。
解决方法是什么?
【问题讨论】:
-
您的文本文件放在 jar 中的什么位置/
-
见上面修改过的问题。
-
因此您的问题不清楚。请使用不同的措辞进行澄清。如果您的问题是关于 jar 文件的二进制格式,那么这是 Oracle 或任何编写 ANT 和 Eclipse 的人的问题。在 Eclipse 中,我创建了所示的文件夹结构。如果您在我的 build.xml 脚本中询问 XML 片段,请告诉我,我可以复制并粘贴上面的内容,否则请澄清。
-
Jigar 询问您罐子里的内容。 jar 文件只是一个 zip 文件,您可以解压缩其内容以检查文本文件是否存在。
-
能否请您发布jar文件的目录结构(包括您的文本文件及其父目录,忽略其他文件)
标签: java linux swt inputstream