【问题标题】:getResourceAsStream returns null for txt files but valid for imagesgetResourceAsStream 为 txt 文件返回 null 但对图像有效
【发布时间】: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


【解决方案1】:

cmets 引导我找到答案。

getResourceAsStream() 方法有效。我只是没有意识到该文件根本不在jar中作为txt扩展名,因此失败了。

    <target name="jarResources" depends="jarCode">
        <jar destfile="${jar.code}" update="true">
            <fileset dir="${src.dir}" includes="**/*.png" />
            <fileset dir="${src.dir}" includes="**/*.jpg" />
            <fileset dir="${src.dir}" includes="**/*.ico" />
            <fileset dir="${src.dir}" includes="**/*.txt" />
        </jar>
    </target>

我错过了 jarResources 部分的最后一行。它最初只有 png、jpg 和 ico。添加 txt 行解决了这个问题。

问题可能出在构建脚本中,而不仅仅是在 Java 中,经验教训。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2014-12-07
    • 2011-07-11
    • 2013-10-02
    • 2013-06-21
    • 1970-01-01
    相关资源
    最近更新 更多