如何在Android中打开raw文件夹中的文件

4

我正在使用MultipartEntity并试图引用原始文件夹中的文件。以下是代码:

MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart(new FormBodyPart("file", new FileBody(new File("test.txt"))));

test.txt文件在我的res/raw文件夹中。当我执行代码时,出现以下异常:FileNotFoundException:/ test.txt:打开失败:ENOENT(没有这样的文件或目录)

有人可以帮我解决这个问题吗?

2个回答

9

很遗憾,您不能直接从原始文件夹中创建File对象。您需要将其复制到SD卡或应用程序缓存中。

您可以通过以下方式检索文件的输入流:

    InputStream in = getResources().openRawResource(R.raw.yourfile);

  try {
       int count = 0;
       byte[] bytes = new byte[32768];
       StringBuilder builder = new StringBuilder();
       while ( (count = in.read(bytes,0, 32768)) > 0) {
           builder.append(new String(bytes, 0, count));
       }

       in.close();
       reqEntity.addPart(new FormBodyPart("file", new StringBody(builder.toString())));
   } catch (IOException e) {
       e.printStackTrace();
   }

能否从drawable文件夹创建一个文件对象? 另外,在addPart()方法中如何使用InputStream? - Nemin
你的文件包含文本吗? - Blackbelt
使用StringBody读取文件内容并存储为字符串。 - Blackbelt

3

您可以将文件放置在/res/raw目录中,该文件将被索引并可通过R文件中的ID访问:

InputStream is = getResources().openRawResource(R.raw.test);
System.out.println(is);

问题在于我想获取文件对象,以便将其上传到服务器。我没有编写servlet代码,也不能更改它。当我尝试使用InputStream时,服务器会给我400状态码(错误请求)。是否有其他方法可以获取文件的引用?它不需要在原始文件夹中。 - Nemin
哦... 你想要文件的引用吗?那为什么不只使用 R.raw.test(在“res”文件夹中创建“raw”)? - enadun
新的File()需要一个URL。你能建议我如何在传递URL时使用ID R.raw.test吗? - Nemin
Uri myFile = Uri.parse("android.resource://com.package.project/raw/filename"); 注意:请正确填写您的套餐和项目名称。 - enadun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接