getResourceAsStream()返回null

时间:2014-12-20 23:10:05

标签: 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(),但我显然没有得到它。

2 个答案:

答案 0 :(得分:1)

getResourceAsStream()在Android中并不是非常有用。它指的是嵌入在JAR或类路径容器中的文件,而不是android资源。您可能希望使用android assets功能。您只需将资产文件("data.txt")放在项目的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的内容资源适用于android知道如何加载和解析的数据类型,例如drawables,strings和各种xml文件。资产用于您将要阅读和解析的原始数据。

答案 1 :(得分:0)

Android中的resouse意味着drawables,values .. etc文件夹。

对于文本文件,创建一个名为raw的文件夹并将数据文件放在那里。

尝试将路径发送到库方法,如data.txt,然后作为raw / data.txt发送