【问题标题】:How to open a file in raw folder in Android如何在Android中打开原始文件夹中的文件
【发布时间】:2013-05-20 10:28:36
【问题描述】:

我正在使用 MultipartEntity,我正在尝试引用原始文件夹中的文件。代码如下:

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

test.txt 文件位于我的 res/raw 文件夹中。当我执行代码时,出现以下异常: FileNotFoundException: /test.txt: open failed: ENOENT (No such file or directory)

谁能帮我解决这个问题?

【问题讨论】:

    标签: android file-upload multipartentity


    【解决方案1】:

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

    您可以通过这种方式检索文件的 InputStream

        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?
    • 您的文件是否包含文本?
    • 使用字符串体。读取字符串中文件的内容
    【解决方案2】:

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

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

    【讨论】:

    • 问题是我想获取文件对象,以便将其上传到服务器上。我还没有编写 servlet 代码,也无法更改它。当我尝试使用 InputStream 时,服务器会给我 400 状态代码(错误请求)。还有其他为什么我可以获得文件的引用吗?它不必在原始文件夹中。
    • 哦...您想要参考您的文件吗?那你为什么不只使用R.raw.test(在“res”文件夹中创建“raw”)
    • 新的 File() 请求一个 URL。你能建议我如何在传递 URL 时使用 ID R.raw.test 吗?
    • Uri myFile = Uri.parse("android.resource://com.package.project/raw/filename"); 注意正确给出你的包和项目名称
    猜你喜欢
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多