猿问

如何将文件从“资产”文件夹复制到sdCard?

如何将文件从“资产”文件夹复制到sdCard?

我有一些文件在assets文件夹。我需要将它们全部复制到一个文件夹中,比如/sdCard/文件夹。我想在线程中完成这个任务。我该怎么做?



蛊毒传说
浏览 547回答 3
3回答

RISEBY

由于一些错误,上面的解决方案无法工作:创建目录无效android返回的资产还包含三个文件夹:图像、声音和webkit。添加了处理大型文件的方法:将扩展名.mp3添加到项目中的资产文件夹中的文件中,在复制过程中,目标文件将没有.mp3扩展名下面是代码(我留下了Log语句,但现在可以删除它们):final&nbsp;static&nbsp;String&nbsp;TARGET_BASE_PATH&nbsp;=&nbsp;"/sdcard/appname/voices/";private&nbsp;void&nbsp;copyFilesToSdCard()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;copyFileOrDir("");&nbsp;//&nbsp;copy&nbsp;all&nbsp;files&nbsp;in&nbsp;assets&nbsp;folder&nbsp;in&nbsp;my&nbsp;project}private&nbsp;void&nbsp;copyFileOrDir(String&nbsp;path)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;AssetManager&nbsp;assetManager&nbsp;=&nbsp;this.getAssets(); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;assets[]&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i("tag",&nbsp;"copyFileOrDir()&nbsp;"+path); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assets&nbsp;=&nbsp;assetManager.list(path); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(assets.length&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyFile(path); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fullPath&nbsp;=&nbsp;&nbsp;TARGET_BASE_PATH&nbsp;+&nbsp;path; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i("tag",&nbsp;"path="+fullPath); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;dir&nbsp;=&nbsp;new&nbsp;File(fullPath); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!dir.exists()&nbsp;&&&nbsp;!path.startsWith("images")&nbsp;&&&nbsp;!path.startsWith("sounds")&nbsp;&&&nbsp;!path.startsWith("webkit")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!dir.mkdirs()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i("tag",&nbsp;"could&nbsp;not&nbsp;create&nbsp;dir&nbsp;"+fullPath); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;assets.length;&nbsp;++i)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(path.equals("")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;path&nbsp;+&nbsp;"/"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!path.startsWith("images")&nbsp;&&&nbsp;!path.startsWith("sounds")&nbsp;&&&nbsp;!path.startsWith("webkit")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyFileOrDir(&nbsp;p&nbsp;+&nbsp;assets[i]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;ex)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.e("tag",&nbsp;"I/O&nbsp;Exception",&nbsp;ex); &nbsp;&nbsp;&nbsp;&nbsp;}}private&nbsp;void&nbsp;copyFile(String&nbsp;filename)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;AssetManager&nbsp;assetManager&nbsp;=&nbsp;this.getAssets(); &nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;in&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;out&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;newFileName&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i("tag",&nbsp;"copyFile()&nbsp;"+filename); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;=&nbsp;assetManager.open(filename); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(filename.endsWith(".jpg"))&nbsp;//&nbsp;extension&nbsp;was&nbsp;added&nbsp;to&nbsp;avoid&nbsp;compression&nbsp;on&nbsp;APK&nbsp;file &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newFileName&nbsp;=&nbsp;TARGET_BASE_PATH&nbsp;+&nbsp;filename.substring(0,&nbsp;filename.length()-4); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newFileName&nbsp;=&nbsp;TARGET_BASE_PATH&nbsp;+&nbsp;filename; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;=&nbsp;new&nbsp;FileOutputStream(newFileName); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;buffer&nbsp;=&nbsp;new&nbsp;byte[1024]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;read; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((read&nbsp;=&nbsp;in.read(buffer))&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(buffer,&nbsp;0,&nbsp;read); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.flush(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.e("tag",&nbsp;"Exception&nbsp;in&nbsp;copyFile()&nbsp;of&nbsp;"+newFileName); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.e("tag",&nbsp;"Exception&nbsp;in&nbsp;copyFile()&nbsp;"+e.toString()); &nbsp;&nbsp;&nbsp;&nbsp;}}编辑:更正了一个错误“;”这是一个系统“无法创建dir”错误。
随时随地看视频慕课网APP

相关分类

Android
我要回答