1.权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2.
/**
* 复制文件
*
* @param context 上下文对象
* @param zipPath 源文件
* @param targetPath 目标文件
* @throws Exception
*/
public static void copy(Context context, String zipPath, String targetPath) throws Exception {
if (TextUtils.isEmpty(zipPath) || TextUtils.isEmpty(targetPath)) {
return;
}
Exception exception = null;
File dest = new File(targetPath);
dest.getParentFile().mkdirs();
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(context.getAssets().open(zipPath));
out = new BufferedOutputStream(new FileOutputStream(dest));
byte[] buffer = new byte[1024];
int length = 0;
while ((length = in.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
} catch (FileNotFoundException e) {
exception = new Exception(e);
} catch (IOException e) {
exception = new Exception(e);
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
exception = new Exception(e);
}
}
if (exception != null) {
throw exception;
}
}
/**
* 拷贝assets文件下文件到指定路径,注意:文件和文件夹不能在同一个目录下
* @param context 上下文
* @param assetDir 源文件/文件夹 假如assets有一个文件夹test,assetDir=="test"
* @param targetDir 目标文件夹
* @throws Exception
*/
public static void copyAssets(Context context, String assetDir, String targetDir) throws Exception {
if (TextUtils.isEmpty(assetDir) || TextUtils.isEmpty(targetDir)) {
return;
}
String separator = File.separator;//分割线
// 获取assets目录assetDir下一级所有文件以及文件夹
String[] fileNames = context.getResources().getAssets().list(assetDir);
Log.e(TAG, "copyAssets: fileNames.length==" + fileNames.length);
// 如果是文件夹(目录),则继续递归遍历
if (fileNames.length > 0) {
File targetFile = new File(targetDir);
if (targetFile.exists()) {
targetFile.delete();
targetFile.mkdirs();
}
for (String fileName : fileNames) {
String s = assetDir + separator + fileName;
Log.e(TAG, "copyAssets: " + s);
copyAssets(context, s, targetDir + separator + fileName);
}
} else { // 文件,则执行拷贝
copy(context, assetDir, targetDir);
}
}