2011-08-09 14 views
0

コードを実行してプロジェクト自体のリソースフォルダにあるファイルを使用すると、問題は発生しません。それはファイルを正常に圧縮し、私はWINZIPを使用してそれを抽出することができます。問題は、プロジェクトフォルダにないファイルを圧縮しようとしたときに発生します。ファイルを圧縮する際の問題

私が同じことをすると、私はsrcファイルとdestファイルの両方の絶対パスを渡しています。私のプログラムでは例外はありませんが、そのzipファイルを開こうとすると、File is Invalidというエラーが表示されます。

これはなぜ起こっているのか誰にでも教えてください。

パブリック静的ボイド圧縮(文字列srcPath、文字列DESTPATH){

srcFile = new File(srcPath); 
    destFile = new File(destPath); 
    try { 
     fileInputStream = new FileInputStream(srcFile); 
     fileOutputStream = new FileOutputStream(destFile); 
     zipEntry = new ZipEntry(srcPath); 
     zipOutputStream = new ZipOutputStream(fileOutputStream); 
     zipOutputStream.putNextEntry(zipEntry); 
     byte[] data = new byte[12]; 
     while ((fileInputStream.read(data)) != -1) { 
      zipOutputStream.write(data); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try{ 
      fileInputStream.close(); 
     zipOutputStream.close();}catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+2

どのAPIを使用しますか?コードスニペット? – Wivani

+0

これはWindowsでですか?あなたはドライブ文字でジップエントリを作成していますか? 'C:\ path \ file.txt'? – dogbane

+0

@dogbane:はい、それはウィンドウで、ドライブ文字でZIPエントリを作成しています。 – Logan

答えて

3

あなたのzipファイルを解凍しようとすると、それがするので、あなたはあなたのzipファイルにドライブ文字とパスを保存しないでくださいドライブの名前でディレクトリを作成しようとすると失敗します。

ZipEntryを作成する前に、パスからドライブ文字を削除するようにコードを変更する必要があります。

+0

ありがとう、それは働いた。しかし、なぜ私たちはパスからドライブレターを削除する必要がありますか? – Logan

+0

"C:"というディレクトリを作成してみてください。それは許可されていないことがわかります。同じように、あなたがあなたのジッパーに手紙を書いてそれを抜き取ろうとすると、それは失敗するでしょう。 – dogbane

+0

はい、失敗しています。しかし、私が7zipを使ってファイルを抽出した場合、それは失敗しません。代わりに、解凍されたフォルダには、D_のようなフォルダとすべての内部フォルダが表示されます。 – Logan

関連する問題