首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android:如何从资产文件创建文件对象?

Android:如何从资产文件创建文件对象?
EN

Stack Overflow用户
提问于 2012-05-02 02:57:07
回答 3查看 20.5K关注 0票数 23

我在assets文件夹中有一个文本文件,需要将其转换为文件对象(而不是InputStream)。当我尝试这样做的时候,我得到了“没有这样的文件”异常:

代码语言:javascript
复制
String path = "file:///android_asset/datafile.txt";
URL url = new URL(path);
File file = new File(url.toURI());  // Get exception here

我可以修改这个来让它工作吗?

顺便说一句,我尝试了“通过示例进行编码”,在我的项目中的其他地方查看了下面这段代码,它引用了assets文件夹中的HTML文件

代码语言:javascript
复制
public static Dialog doDialog(final Context context) {
WebView wv = new WebView(context);      
wv.loadUrl("file:///android_asset/help/index.html");

我承认我不完全理解上面的机制,所以我尝试做的事情可能不能工作。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-02 03:00:50

您不能直接从资源获取File对象,因为资源不是以文件形式存储的。您需要将资源复制到一个文件,然后在副本上获取一个File对象。

票数 29
EN

Stack Overflow用户

发布于 2014-02-12 22:05:23

不能直接从资源获取File对象。

首先,使用例如AssetManager#open从您的资产中获取inputStream

然后复制inputStream:

代码语言:javascript
复制
    public static void writeBytesToFile(InputStream is, File file) throws IOException{
    FileOutputStream fos = null;
    try {   
        byte[] data = new byte[2048];
        int nbread = 0;
        fos = new FileOutputStream(file);
        while((nbread=is.read(data))>-1){
            fos.write(data,0,nbread);               
        }
    }
    catch (Exception ex) {
        logger.error("Exception",ex);
    }
    finally{
        if (fos!=null){
            fos.close();
        }
    }
}
票数 12
EN

Stack Overflow用户

发布于 2016-11-07 01:00:24

代码中缺少此函数。@wadali

代码语言:javascript
复制
private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}

来源:https://stackoverflow.com/a/4530294/4933464

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10402690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档