当前位置: 代码迷 >> Android >> Android程序函数 将assets文件夹上的文件复制到手机的sd
  详细解决方案

Android程序函数 将assets文件夹上的文件复制到手机的sd

热度:50   发布时间:2016-05-01 13:55:22.0
Android程序函数 将assets文件夹下的文件复制到手机的sd
最近Android吧在做个功能是将asset文件夹下的所有文件(包括子文件)全部拷贝出来到指定目录下。所用的方法无非是用AssetManager。但是这里有个问题是也要讲子文件夹和子文件都要拷贝出来。到网上Google了下,也到baidu搜索了下,发现了很多类似问题。但好像都有问题。有些显然只能做到将asset直接目录下的文件拷贝出来,但子文件夹拷贝不出来,而且,碰到文件夹,会抛异常。无奈自己只好动手写了个。如下:
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);				}			} catch (Exception e) {				e.printStackTrace();			}		}	}


非原创,原文出处: http://tieba.baidu.com/f?kz=1096393066
  相关解决方案