問題タブ [zipinputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
409 参照

java - jarファイル内の特定のディレクトリ内のいくつかのファイルを置き換える方法は?

jar ファイル内の特定のディレクトリ内の一部のファイルを置換または更新するという問題があります。

すでにいくつかの投稿を読みました。このリンクで提供されるコード (JarUpdater クラス) Updating .JAR's contents from code

ZipInputStream、ZipOutputStream、ZipEntryなどの役割と使用法を理解するのに非常に役立ちます..

ただし、実行すると、

  1. EOF 例外があります

[mk7 による編集: jar ファイルを 20 回ほど調べたところ、破損していることがわかりました。そのため、jar ファイルを新しいものに置き換えた後、EOF 例外はなくなりました。以下の他の 2 つの問題は未解決のままです]

  1. これら 2 つの新しい xml ファイルは、jar ファイルの「ルート ディレクトリ」にのみコピーされます。

  2. これら 2 つの新しい xml ファイルは、/conf というディレクトリ内の 2 つの元のファイルを決して置き換えません。

xml ファイルを新しいファイルに置き換えるには、どのコード行を変更すればよいですか?

System.out.println を使用すると、while ループがすべてのディレクトリを通過し、期待どおりにすべてのファイルを比較することがわかりました。新しい一時 jar も期待どおりに作成されました...「notInFiles = false」というステートメントで問題が解決すると思いましたが、そうではありません。

/conf にステップインして、これら 2 つのファイルのみを置き換え、jar ファイルのルートにコピーを残さないようにするにはどうすればよいですか?

私は何が欠けていますか?洞察をありがとう!

以下はそのリンクのコードです。

0 投票する
2 に答える
11931 参照

java - ZipEntry のメソッド getSize() が正しいサイズを返すように、ZipOutputStream を使用して圧縮された Zip アーカイブを作成する方法は?

test_file.pdf1 つのファイルを zip アーカイブに入れ、test.zipこのアーカイブを読み取るコード例を考えてみましょう。

出力: Entry size: -1

ただし、圧縮されていない zip アーカイブを作成する場合 (メソッドZipEntry.STORED)、​​getSize() は正しいサイズを返します。

出力 (たとえば、正しい): Entry size: 9223192

正しいentry.getSize()存在の圧縮された zip アーカイブ (例: Ark プログラムによる zip アーカイブ)。

質問:標準ライブラリのみを使用してエントリの正しいサイズを返す圧縮(または存在する場合は別の) zip アーカイブを作成する方法は?ZipEntry.DEFLATED

この推奨事項を試しましたが、うまくいきません:

出力: Entry size: -1

0 投票する
1 に答える
210 参照

java - ZipInputStream を含むすべての InputStreams を読み取るメソッドを定義する方法は?

以前にこれを尋ねたところ、ヘルパー クラスを使用するコードを提供していないために投稿が削除されました。今回は、正確な問題を示す完全なテスト スイートを作成しました。

Java の ZipInputStream は、InputStream 抽象クラスに関して Liskov Substitution Principle (LSP) を破っていると私は考えています。ZipInputStream を InputStream のサブタイプにするには、プログラム内のタイプ InputStream のオブジェクトを、そのプログラムの望ましいプロパティ (正確性、実行されるタスクなど) を変更することなく、タイプ ZipInputStream のオブジェクトに置き換えることができます。

ここで LSP に違反する方法は、読み取りメソッドです。

InputStream.read(byte[], int, int) は、次を返すと述べています。

バッファに読み込まれた合計バイト数、またはストリームの終わりに達したためにデータがなくなった場合は -1。

ZipInputStream の問題は、-1 の戻り値の意味が変更されていることです。それは述べています:

読み取られた実際のバイト数、またはエントリの最後に達した場合は -1

(実際には、Android のドキュメントhttp://developer.android.com/reference/java/util/zip/ZipInputStream.htmlで利用可能なメソッドに同様の問題へのヒントがあります)

次に、問題を示すコードについて説明します。(これは私が実際にやろうとしていたことの縮小版ですので、貧弱なスタイル、マルチスレッドの問題、またはストリームが進んでいるという事実などを許してください)。

ストリームの SHA1 を生成するために任意の InputStream を受け入れるクラス:

単体テスト:

問題に戻ります... InputStream の場合はストリームの最後まで読み取ることができますが、ZipInputStream の場合は読み取れないため、LSP に違反しています。もちろん、これにより、そのような方法で使用しようとするメソッドの正確性プロパティが壊れます。 .

これを達成できる方法はありますか、それとも ZipInputStream に根本的な欠陥がありますか?

0 投票する
3 に答える
13458 参照

java - ZipInputStream から特定のファイルを取得する

を実行できますがZipInputStream、反復を開始する前に、反復中に必要な特定のファイルを取得したいと考えています。どうやってやるの?

0 投票する
2 に答える
848 参照

java - エントリセット全体を反復処理することなく、ZipInputStream から特定のファイルを読み取る方法はありますか?

エントリセット全体を反復処理することなく、特定のファイルをZipFile/から直接読み取る方法があるかどうかを知りたいです。ZipInputStreamアーカイブに多数のファイルが含まれている場合、これはかなりのオーバーヘッドになる可能性があると思います。より良い方法はありますか?

私はこれを行うことができることを知ってTrueZipおり、少し前にそれを行いましたが、1.8 SDK に最近より適切なものが含まれているかどうか疑問に思っています...?

0 投票する
2 に答える
809 参照

java - zip ファイルから読み取った XML ファイルから空白を削除する

zip ファイル内に保存されている XML ファイルを読み込んでいます。空白を削除する必要がありますが、何も機能していないようです。これが私が持っているものですが、trim() は何もしていません。

0 投票する
1 に答える
812 参照

java - ZipInputStream を使用して内部 zip ファイルのコンテンツを読み取り、変更する

ZipInputStream を使用して web.xml を変更しようとしています。読み取るファイルは、ear/war ファイル内にある web.xml です。

C:/XX.ear/YY.war/WEB-INF/web.xml

new ZipInputStream( zipFile .getInputStream(zipEntry)) 内部 zip ファイルを指定して、内部 war ファイルの入力ストリームを取得できませんでした

内側の zipentry を入力ストリームとして読み取ることは可能ですか??

0 投票する
0 に答える
701 参照

java - zipInputStream を使用してサーバーから ZipFile をダウンロードする

サーバーから受信した ZipFile を抽出して保存したいと考えています。

このコードは半分しか機能しません。

問題は、データが受信される前にメソッド zipStream.getNextEntry() が呼び出されることだと思います。受信データが読み取られるのをどのように待つことができますか?