我从网上收到以下代码,它看起来一切正常,但我得到文件找不到异常…
我在sdcard中有一个名为NewForestPonies.epub的文件
许可:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
码:
String ZipFileLocation=Environment.getExternalStorageDirectory()+"/NewForestPonies.epub"; String unZipFileLocation=Environment.getExternalStorageDirectory()+"/DEST/"; Decompress decomp=new Decompress(ZipFileLocation,unZipFileLocation,"zip"); decomp.run(); public Decompress(String zipFile,String location,String t) { super(t); _zipFile = zipFile; _location = location; } public void run() { FileInputStream fin=null; ZipInputStream zin=null; File file =null; ZipEntry ze ; FileOutputStream fout=null; try{ System.out.println(_zipFile ); System.out.println(_location); fin = new FileInputStream(_zipFile); zin = new ZipInputStream(fin); ze= null; byte[] buffer = new byte[1024]; int length; while ((ze = zin.getNextEntry()) != null) { file = new File((_location +"/" + ze.getName())); file.getParentFile().mkdirs(); fout= new FileOutputStream(_location + ze.getName()); while ((length = zin.read(buffer))>0) { fout.write(buffer,length); } zin.closeEntry(); fout.close(); } //MyDownloadListener.progress=70; zin.close(); }catch(Exception e) { Log.e("Decompress","unzip",e); } finally { try { fin.close(); zin.close(); fout.close(); } catch (IOException e) { e.printStackTrace(); } } }
ERRROR:
03-20 15:49:15.909: ERROR/Decompress(9479): java.io.FileNotFoundException: /mnt/sdcard/DEST/NewForestPonies/iTunesMetadata.plist (Not a directory) 03-20 15:49:15.909: ERROR/Decompress(9479): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 03-20 15:49:15.909: ERROR/Decompress(9479): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:239) 03-20 15:49:15.909: ERROR/Decompress(9479): at java.io.FileOutputStream.<init>(FileOutputStream.java:101) 03-20 15:49:15.909: ERROR/Decompress(9479): at java.io.FileOutputStream.<init>(FileOutputStream.java:77) 03-20 15:49:15.909: ERROR/Decompress(9479): at com.AndroidExplorer.Decompress.run(Decompress.java:42) 03-20 15:49:15.909: ERROR/Decompress(9479): at com.AndroidExplorer.DecompressActivity.onCreate(DecompressActivity.java:23) 03-20 15:49:15.909: ERROR/Decompress(9479): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 03-20 15:49:15.909: ERROR/Decompress(9479): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1715) 03-20 15:49:15.909: ERROR/Decompress(9479): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767) 03-20 15:49:15.909: ERROR/Decompress(9479): at android.app.ActivityThread.access$1500(ActivityThread.java:122) 03-20 15:49:15.909: ERROR/Decompress(9479): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005) 03-20 15:49:15.909: ERROR/Decompress(9479): at android.os.Handler.dispatchMessage(Handler.java:99) 03-20 15:49:15.909: ERROR/Decompress(9479): at android.os.Looper.loop(Looper.java:132) 03-20 15:49:15.909: ERROR/Decompress(9479): at android.app.ActivityThread.main(ActivityThread.java:4028) 03-20 15:49:15.909: ERROR/Decompress(9479): at java.lang.reflect.Method.invokeNative(Native Method) 03-20 15:49:15.909: ERROR/Decompress(9479): at java.lang.reflect.Method.invoke(Method.java:491) 03-20 15:49:15.909: ERROR/Decompress(9479): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 03-20 15:49:15.909: ERROR/Decompress(9479): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 03-20 15:49:15.909: ERROR/Decompress(9479): at dalvik.system.NativeStart.main(Native Method)
解决方法
我认为您的代码中的问题是您正在关闭ZipInputStream zin在1st while循环.
使用下面的代码run(),它可以帮助你.
public void run() { BufferedOutputStream bufferedOutputStream = null; FileInputStream fileInputStream; File dest_file = new File(_location); dest_file.mkdirs(); // creates if destination directory not existed try { fileInputStream = new FileInputStream(_zipFile); ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(fileInputStream)); ZipEntry zipEntry; while ((zipEntry = zipInputStream.getNextEntry()) != null) { String zipEntryName = zipEntry.getName(); File file = new File(_location + zipEntryName); if (file.exists()) { } else { if(zipEntry.isDirectory()) { file.mkdirs(); } else { byte buffer[] = new byte[1024]; FileOutputStream fileOutputStream = new FileOutputStream(file); bufferedOutputStream = new BufferedOutputStream(fileOutputStream,1024); int count; while ((count = zipInputStream.read(buffer,1024)) != -1) { bufferedOutputStream.write(buffer,count); } bufferedOutputStream.flush(); bufferedOutputStream.close(); } } } zipInputStream.close(); } catch(Exception e) { Log.e("Decompress",e); } }