安卓:从复制资产SD卡tar文件 - IOException异常异常、资产、文件、tar

2023-09-06 09:03:03 作者:綪祢滚黜了偶の心

我试图复制从Android的资产SD卡一个.tar文件,但复制文件我收到IOException异常。我用这code从previous线程Android:如何在资产到SD卡?

复制文件

下面是LogCat中的文件。我做这一切的AsyncTask,但我也试图在主UI线程但还是收到这个异常。

  6月1日至11日:51:49.925:E /标签(3881):无法复制资源文件:temp.tar六月1日至11日:51:49.925:E /标签(3881):java.io.IOException异常六月1日至11日:51:49.925:E /标签(3881):在android.content.res.AssetManager.readAsset(本机方法)六月1日至11日:51:49.925:E /标签(3881):在android.content.res.AssetManager.access $ 700(AssetManager.java:36)六月1日至11日:51:49.925:E /标签(3881):在android.content.res.AssetManager $ AssetInputStream.read(AssetManager.java:571)六月1日至11日:51:49.925:E /标签(3881):在com.example.apptest.MainActivity.copyFile(MainActivity.java:130)六月1日至11日:51:49.925:E /标签(3881):在com.example.apptest.MainActivity.copyAssets(MainActivity.java:116)六月1日至11日:51:49.925:E /标签(3881):在com.example.apptest.MainActivity.access $ 0(MainActivity.java:97)六月1日至11日:51:49.925:E /标签(3881):在com.example.apptest.MainActivity $ 1.doInBackground(MainActivity.java:32)六月1日至11日:51:49.925:E /标签(3881):在com.example.apptest.MyASyncTask.doInBackground(MyASyncTask.java:1)六月1日至11日:51:49.925:E /标签(3881):在android.os.AsyncTask $ 2.call(AsyncTask.java:185)六月1日至11日:51:49.925:E /标签(3881):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)六月1日至11日:51:49.925:E /标签(3881):在java.util.concurrent.FutureTask.run(FutureTask.java:137)六月1日至11日:51:49.925:E /标签(3881):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)六月1日至11日:51:49.925:E /标签(3881):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:561)六月1日至11日:51:49.925:E /标签(3881):在java.lang.Thread.run(Thread.java:1096) 

解决方案

其实,我觉得主要的问题是与拉链焦油格式。当你提供这个还挺文件格式从资产复制到 SD卡它不能复制。原因可能是拉链本身文件的集合创造的问题。

但改变文件扩展名我能够复制的.tar 从文件到 SD卡 资产

最好的办法是保持无扩展名的资产文件,并同时写入到输出流追加扩展它的名字(preceding点)。然后复制这个文件将被不再阻。

Oracle 连接异常 Io 异常 The Network Adapter could not establish the connection

I am trying to copy a .tar file from android assets to sdcard but while copying file I am getting IOException. I am using this code from a previous thread Android: How to copy files in 'assets' to sdcard?

Here is LogCat file. I am doing all this in ASyncTask but I have also tried it on main UI thread and still getting this 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)

解决方案

Actually, I think the main problem is with zip or tar format. It can not copy when you provide this kinda file format to copy from assets to sdcard. Reason might be that zip is in itself a collection of files which creates problem.

But changing the file extension I am able to copy that .tar file to sdcard from assets.

The best idea is to keep your file without extension in assets and while writing it to output stream append extension with its name(preceding dot). Then copying this file will be not hinderance anymore.