Android:将资产中的tar文件复制到sdcard – IOException
我试图将.tar文件从android资产复制到SD卡,但在复制文件时我收到了IOException。 我正在使用前一个线程的代码如何将文件从’assets’文件夹复制到SD卡?
这是LogCat文件。 我在ASyncTask中做了所有这些,但我也尝试在主UI线程上,仍然得到这个exception。
01-11 06:51:49.925: E/tag(3881): Failed to copy asset file: temp.tar 01-11 06:51:49.925: E/tag(3881): java.io.IOException 01-11 06:51:49.925: E/tag(3881): at android.content.res.AssetManager.readAsset(Native Method) 01-11 06:51:49.925: E/tag(3881): at android.content.res.AssetManager.access$700(AssetManager.java:36) 01-11 06:51:49.925: E/tag(3881): at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:571) 01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MainActivity.copyFile(MainActivity.java:130) 01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MainActivity.copyAssets(MainActivity.java:116) 01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MainActivity.access$0(MainActivity.java:97) 01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MainActivity$1.doInBackground(MainActivity.java:32) 01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MyASyncTask.doInBackground(MyASyncTask.java:1) 01-11 06:51:49.925: E/tag(3881): at android.os.AsyncTask$2.call(AsyncTask.java:185) 01-11 06:51:49.925: E/tag(3881): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 01-11 06:51:49.925: E/tag(3881): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 01-11 06:51:49.925: E/tag(3881): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 01-11 06:51:49.925: E/tag(3881): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 01-11 06:51:49.925: E/tag(3881): at java.lang.Thread.run(Thread.java:1096)
你在清单中得到了许可吗?
因为写某些东西需要得到许可
我认为问题不在于写作的许可。 当您尝试从assets文件夹中读取文件时。 尝试清理项目并重新构建它。 请注意,您必须在MainActivity
使用getAssets()
来打开资产文件。 使用Try/Catch
块捕获IOException
以找出根本原因。 请发布相应的代码以帮助您
以下是我将资源文件夹中的XML文件复制到SD卡的操作:
File toPath = Environment.getExternalStoragePublicDirectory(mAppDirectory); if (!toPath.exists()) { toPath.mkdir(); } try { InputStream inStream = getAssets().open("file.xml"); BufferedReader br = new BufferedReader(new InputStreamReader(inStream)); File toFile = new File(toPath, "file.xml"); copyAssetFile(br, toFile); } catch (IOException e) { } private void copyAssetFile(BufferedReader br, File toFile) throws IOException { BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter(toFile)); int in; while ((in = br.read()) != -1) { bw.write(in); } } finally { if (bw != null) { bw.close(); } br.close(); } }
实际上,我认为主要问题是zip
或tar
格式。 当您提供此类文件格式以从assets
复制到sdcard
时,它无法复制。 原因可能是zip
本身就是一个产生问题的文件集合。
但是更改文件扩展名我能够将.tar
文件从assets
复制到sdcard
。
最好的想法是保持文件没有扩展资产,并将其写入输出流附加扩展名及其名称(在点之前)。 然后复制此文件将不再是阻碍。