4

ディスクからいくつかのファイルを読み取り、java.util.zip.ZipOutputStreamを使用してzipする小さなアプリケーションを作成しました。zipファイルが正常に作成されています。しかし、Windowsでそれを開こうとしたり抽出したりしようとすると、「Windowsは、コンピューターを保護するためにこれらのファイルへのアクセスをブロックしました」などのエラーメッセージが表示されます。csvファイルのみを圧縮しています。しかし、Java自体からzipinputstreamクラスを使用して解凍しようとすると、正しく解凍されます。誰かがそれに光を当てることができますか?

よろしく、アヌープ

4

5 に答える 5

4

ついに私は問題を見つけました。それは道に関係していた。本当に面白いですが、zip出力ストリームに圧縮するファイルの絶対パスを指定すると、このエラーが発生します。相対パスとビンゴでやってみました!!! 機能した。したがって、zipする前にいくつかの回避策を実行し、ファイルの親を現在の作業ディレクトリにポイントしてからzipしました。回答ありがとうございます。

于 2010-11-01T09:41:50.533 に答える
4

この投稿は数年前のことです。ただし、java.util.zipを初めて使用したときに非常によく似た問題が発生したため、この投稿で問題を解決しました。

絶対パスに関するAnoopの最後のコメントは、問題を見つけるのに役立ちました。いくつかの投稿を検索しても答えが見つからなかったので、ここに投稿したいと思いました。実際には、ローランドの最後の質問に答えています。

問題は、相対パスではなく、完全修飾パス/ファイルでZipEntry(file)を使用した場合でした。結果のZIPをWindowsOSインスタンスで開くことができませんでした。ただし、Javaを使用してファイルを再度抽出することはできました。この問題に気付いたのは、7zipでzipを開いてからでした。result.zipファイルの最初のフォルダーは「D:」でした。私のディレクトリは私のDドライブの下の長い道のりでした。したがって、「Results.zip」ファイルを開くと、zipファイル(7zipから)のディレクトリツリーをクリックした後に表示される内容は次のとおりです。Results.zip\ D:\ Apps \ vertigo \ instance5 \ runtime \ myManager \ DiscoveryResources \データ

「data」ディレクトリには、実際に圧縮したすべてのファイル/ディレクトリが含まれていました。

データディレクトリからパスを削除すると、Results.zipは「D:」ではなく「data」で始まりました。そして、そのファイルはWindows 7、2012などで開くことができます。

それが将来誰かに役立つことを願っています。

ありがとう、-クリス

于 2015-04-25T22:53:15.307 に答える
2

あなたはあなたを保護しているWindowsのセキュリティ機能を見ていますが、ファイルが正しくないことを示していません。おそらく、zipファイルがおかしいと判断したためです。7zipでファイルを正しく開くことができますか?

于 2010-11-01T06:42:59.963 に答える
1

ファイルを作成したJavaプロセスはまだ実行されていますか?はいの場合、zipファイルが開いたままになっている可能性があります。これは、Windowsでは通常、他のプロセスがそこから読み取ることができないことを意味します。コードは次のようになります。

OutputStream os = new FileOutputStream("reports.zip");
try {
  ZipOutputStream zos = new ZipOutputStream(os);
  ...
} finally {
  os.close();
}
于 2010-11-01T06:45:56.370 に答える
1

OTNで同じファイルに複数の画像を保存およびロードする際の問題に示されているコードを試してください。コードをもう一度テストしたところ、ファイルをダブルクリックしてimages.zipを開くと、Windowsにコンテンツが正常に表示されます。

于 2010-11-01T07:26:02.930 に答える