java - getResourceAsStream() 返回 null

标签 java android jar getresource

我有一个 java .jar 库,我试图从那里访问我的 Android 项目的文件 与:

InputStream inputStream = getClass().getResourceAsStream("/folder/data.txt");
someMethod(inputStream); // inputStream is null

但是inputStream始终为null。我很困惑应该将 /folder/data.txt 放在哪里 能够从.jar中找到它。

从 .jar 项目中我可以找到 data.txt,在 eclipse 中执行以下操作:

MyProject > properties > java build path > libraries > Add class folder

和这段代码:

InputStream inputStream = getClass().getResourceAsStream("/data.txt"); // without the folder

这是 Java 项目的结构:

MyJavaProject

  - src
    - com.example
      - something.java
      - folder
           - data.txt

现在,在 Android 项目中我尝试做同样的事情,但我总是得到 null (inputStream):

MyAndroidProject

  - src
    - several packages
    - folder
       - data.txt
  - libs
     - my jar

我应该把 data.txt 放在哪里?或者我应该更改 .jar 中的某些内容

我读过很多类似的问题,但没有找到解决方案。我还读过有关 getResourceAsStream() 的内容,但我显然没有明白。

最佳答案

getResourceAsStream() 在 android 中并不是很有用。它指的是嵌入在 JAR 或类路径容器中的文件,而不是 android 资源。您可能想改用 android assets 功能。您只需将资源文件 ("data.txt") 放置在项目的 assets/ 目录下即可。

要获取 Assets 的 InputStream,您可以使用 AssetsManager,如下所示(为了清楚起见,省略了错误处理:

// get the assets manager from your activity or `Context`
final AssetsManager am = getAssets();
final InputStream   in = am.open("data.txt");
// do stuff with the input stream

另一种方法是使用Resources来代替,但这取决于data.txt的内容Resources适用于android知道如何加载和解析的数据类型,例如可绘制对象、字符串和各种 xml 文件。 Assets 用于您将自己阅读和解析的原始数据。

关于java - getResourceAsStream() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585212/

相关文章:

Java 对参数化类型的原始引用不尊重参数

Android scaledrawable 似乎不起作用

android - 如何搭建astrid task开源项目

python - 我正在尝试使用 Python 在 jar 文件中搜索 '.class' 文件

java - 如何使用pid杀死进程

java - 将组件数组(panel.getComponents())存储到数组列表

java - java时间戳的奇怪之处——简单的测试失败了?

Android - 手动将 View 膨胀到线性布局上

java - 如何从 JAR 应用程序中动态加载类以在另一个 JAR 中使用?

java - Xpages运行时错误: 'java class java.lang.IllegalStateException: Access denied (java.lang.RuntimePermission getClassLoader)'