android 将Assets中的文件拷贝到sdcard上
2013-11-06 15:29
417 查看
public void copyFile(String from, String to) { //例:from:890.salid; // to:/mnt/sdcard/to/890.salid try { int bytesum = 0; int byteread = 0; File oldfile = new File(from);//from为assest中所要写到的sdcard中的名称 if (oldfile.exists()) { InputStream inStream = getResources().getAssets().open(from);//将assets中的内容以流的形式展示出来 OutputStream fs = new BufferedOutputStream(new FileOutputStream(to));//to为要写入sdcard中的文件名称 byte[] buffer = new byte[1024]; while ((byteread = inStream.read(buffer)) != -1) { bytesum += byteread; fs.write(buffer, 0, byteread); } inStream.close(); fs.close(); } } catch (Exception e) { } }
最近在做个功能是将asset文件夹下的所有文件(包括子文件)全部拷贝出来到指定目录下。所用的方法无非是用AssetManager。但是这里有个问题是也要讲子文件夹和子文件都要拷贝出来。到网上Google了下,也到baidu搜索了下,发现了很多类似问题。但好像都有问题。例如:http://licongf18.blog.163.com/blog/static/155695482010102655746661/。显然只能做到将asset直接目录下的文件拷贝出来,但子文件夹拷贝不出来,而且,碰到文件夹,会抛异常。无奈自己只好动手写了个。如下:
Java代码
private void CopyAssets(String assetDir,String dir) { String[] files; try { files = this.getResources().getAssets().list(assetDir); } catch (IOException e1) { return; } File mWorkingPath = new File(dir); //if this directory does not exists, make one. if(!mWorkingPath.exists()) { if(!mWorkingPath.mkdirs()) { } } for(int i = 0; i < files.length; i++) { try { String fileName = files[i]; //we make sure file name not contains '.' to be a folder. if(!fileName.contains(".")) { if(0==assetDir.length()) { CopyAssets(fileName,dir+fileName+"/"); } else { CopyAssets(assetDir+"/"+fileName,dir+fileName+"/"); } continue; } File outFile = new File(mWorkingPath, fileName); if(outFile.exists()) outFile.delete(); InputStream in =null; if(0!=assetDir.length()) in = getAssets().open(assetDir+"/"+fileName); else in = getAssets().open(fileName); OutputStream out = new FileOutputStream(outFile); // Transfer bytes from in to out byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
这里主要用到了递归,其他倒是没有什么。倒是这里还有个存在的问题:如何判断路径的是个文件夹还是文件,我目前使用的方法就是判断有没有后缀,这个可能存在问题。但自己也没找到其他比较好的方法来做,欢迎大家发言。
第一回发原创技术文章,请轻拍。。。
相关文章推荐
- android 将Assets中的文件拷贝到sdcard上
- 【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,并且在AVD中浏览sdcard的文件
- Android 拷贝raw文件夹下面的sqlite数据库文件到SDCard中 然后读取数据库并绑定
- 把assets下的指定文件拷贝到sdcard上
- Android Assets下文件复制到sdcard
- Android开发实践:拷贝assets到sdcard
- Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法
- android复制assets里的压缩文件到sdcard里并解压
- Android开发实践:拷贝assets到sdcard
- 【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,而且在AVD中浏览sdcard的文件
- android复制assets里的压缩文件到sdcard里并解压
- Android 手机sdcard目录或文件的拷贝、移动、删除(递归)
- Android:复制Assets下所有的文件(遍历每一个文件夹),并存入sdcard里面
- android解压缩assets里面的压缩文件到sdcard里面
- android复制assets里的压缩文件到sdcard里并解压
- Android开发实践:拷贝assets到sdcard
- Android开发实践:拷贝assets到sdcard
- 将电脑本地的文件拷贝到android虚拟机的虚拟存储卡(sdcard)
- Android 手机sdcard目录或文件的拷贝、移动、删除(递归)
- android 文件浏览。打开sdcard文件夹。只显示文件夹和txt文件。选择txt文件返回其名字