我在assets文件夹中有一个文本文件,需要将其转换为文件对象(而不是InputStream)。当我尝试这样做的时候,我得到了“没有这样的文件”异常:
String path = "file:///android_asset/datafile.txt";
URL url = new URL(path);
File file = new File(url.toURI()); // Get exception here
我可以修改这个来让它工作吗?
顺便说一句,我尝试了“通过示例进行编码”,在我的项目中的其他地方查看了下面这段代码,它引用了assets文件夹中的HTML文件
public static Dialog doDialog(final Context context) {
WebView wv = new WebView(context);
wv.loadUrl("file:///android_asset/help/index.html");
我承认我不完全理解上面的机制,所以我尝试做的事情可能不能工作。
谢谢!
发布于 2012-05-02 03:00:50
您不能直接从资源获取File
对象,因为资源不是以文件形式存储的。您需要将资源复制到一个文件,然后在副本上获取一个File
对象。
发布于 2014-02-12 22:05:23
不能直接从资源获取File对象。
首先,使用例如AssetManager#open从您的资产中获取inputStream
然后复制inputStream:
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();
}
}
}
发布于 2016-11-07 01:00:24
代码中缺少此函数。@wadali
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/questions/10402690
复制相似问题