アーカイブ内のファイルとフォルダを含むjavaでアーカイブを解凍しようとしています。問題は、フォルダに移動して解凍しようとするたびにFNF例外がスローされることです。次のように私の解凍のコードは次のとおりです。フォルダを含むJava unzip圧縮アーカイブFileNotFound例外
private void unZipUpdate(String pathToUpdateZip, String destinationPath){
byte[] byteBuffer = new byte[1024];
try{
ZipInputStream inZip = new ZipInputStream(new FileInputStream(pathToUpdateZip));
ZipEntry inZipEntry = inZip.getNextEntry();
while(inZipEntry != null){
String fileName = inZipEntry.getName();
File unZippedFile = new File(destinationPath + File.separator + fileName);
System.out.println("Unzipping: " + unZippedFile.getAbsoluteFile());
new File(unZippedFile.getParent()).mkdirs();
FileOutputStream unZippedFileOutputStream = new FileOutputStream(unZippedFile);
int length;
while((length = inZip.read(byteBuffer)) > 0){
unZippedFileOutputStream.write(byteBuffer,0,length);
}
unZippedFileOutputStream.close();
inZipEntry = inZip.getNextEntry();
}
inZipEntry.clone();
inZip.close();
System.out.println("Finished Unzipping");
}catch(IOException e){
e.printStackTrace();
}
}
私は
new File(unZippedFile.getParent()).mkdirs();
で扱う圧縮フォルダを持っていたしかし、それは問題を解決していないようだと思いました。私はここで何が欠けていますか?
スタックトレース:
Unzipping: D:\UnzipTest\aspell
java.io.FileNotFoundException: D:\UnzipTest\aspell\american-w-accents.alias (The system cannot find the path specified)
at java.io.FileOutputStream.open(Native Method)
Unzipping: D:\UnzipTest\aspell\american-w-accents.alias
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at shopupdater.ShopUpdater.unZipUpdate(ShopUpdater.java:47)
at shopupdater.ShopUpdater.unZipUpdate(ShopUpdater.java:33)
at shopupdater.ShopUpdater.main(ShopUpdater.java:67)
"のaspellは、" アーカイブの中にあったフォルダです。
私は別の例外投げ
new File(UnzippedFile.getParent()).mkdirs();
後
unZippedFile.createNewFile();
を追加するダニエルの提案を試みた:Ubuntuの(それは私のマシン上で動作しますが、このコードを試してみてください
Unzipping: D:\UnzipTest\aspell
Unzipping: D:\UnzipTest\aspell\american-w-accents.alias
java.io.FileNotFoundException: D:\UnzipTest\aspell\american-w-accents.alias (The system cannot find the path specified)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at shopupdater.ShopUpdater.unZipUpdate(ShopUpdater.java:56)
at shopupdater.ShopUpdater.unZipUpdate(ShopUpdater.java:33)
at shopupdater.ShopUpdater.main(ShopUpdater.java:76)
スタックトレースを送信してください。 –
@SotiriosDelimanolisが元の投稿に追加されました – user1806716
もしあなたが(inZipEntry.isDirectory())かどうかをチェックしていないからです。ディレクトリの場合、バイトを書き込むのではなく作成してください。 – tom