我需要将Assets中的所有文件夹复制到SDCARD上的特定文件夹中。让我们说我们的目标文件夹名为" RESULT_HERE"在名为" MAIN_FOLDER"的文件夹下
我使用了这段代码,但根本没有结果。无法复制文件甚至无法创建文件夹。 I used this code
有什么想法吗?
答案 0 :(得分:0)
我修改代码以复制具有相同Assets文件夹结构的所有文件夹和文件。只需替换 CopyFiles 方法的代码。
private void CopyFiles(String sdCardPath, String assetFilename){
AssetManager assetManager = getAssets();
try {
String[] files = assetManager.list(assetFilename);
//Try as file
if(files.length == 0){
InputStream in;
OutputStream out;
String fileName = assetFilename.substring(assetFilename.lastIndexOf(File.separator) + 1);
File file = new File(sdCardPath + File.separator + assetFilename.substring(0, assetFilename.length() - fileName.length()));
if(!file.exists())
file.mkdir();
in = assetManager.open(assetFilename);
out = new FileOutputStream(file.getAbsolutePath() + File.separator + fileName);
copyFile(in, out);
in.close();
out.flush();
out.close();
}
//Try as folder
else{
for (String assetFile : files){
String newAssetFilename = assetFilename.length() > 0
? assetFilename + File.separator +assetFile // Is on internal folder
: assetFile; // Is on root of asset folder
CopyFiles(sdCardPath, newAssetFilename);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
要调用此函数,您必须调用:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
CopyFiles(Environment.getExternalStorageDirectory() + File.separator + INTERNAL_PATH, "");
其中 INTERNAL_PATH 是文件夹的相对路径。函数 Environment.getExternalStorageState()是为了确保SD卡存在。
此外,请记住,您必须在Manifest上声明以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />