現在、画像ファイルを既存のzipファイルにコピーしようとしています(追加など)。ただし、出力は空です(つまり、ファイルは実際には存在します。0バイトを使用していると表示されているだけで、開いたり抽出したりすることはできません)。
これが私のコードサンプルです:
Map<String, String> env = new HashMap<>();
env.put("create", "true");
Path path = Paths.get("countMap.zip");
java.net.URI uri = java.net.URI.create("jar:" + path.toUri());
try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
Path nf = fs.getPath("mario.png");
try (OutputStream zos = Files.newOutputStream(nf, StandardOpenOption.CREATE)) {
Files.createFile(nf, null);
Files.copy(nf, zos);
} catch (Exception e) {
e.printStackTrace();
}
}
編集:
Javaコンポーネントをデバッグすると、すべてがうまくいくように見えます。一時ファイルを最終的なファイルの宛先にコピーする際に問題が発生する可能性があるのではないかと思います。
OK、問題が発生しました。
Files.copy(nf, zos);
まったく機能しませんでした。だから私はストリームを使ってみました:
final byte[] bytes = new byte[1024];
int read = 0;
while ((read = inputStream.read(bytes)) != -1) {
zos.write(bytes, 0, read);
}
zos.close();
これもうまくいきませんでした。しかし、おかしなことに(そして、House MDのようなものです:-))私には同じような問題を抱えている友人がいました。彼の場合、ファイルライターは何も出力しませんでした-または半分。もちろん、奇妙です。しかし、彼の問題は、彼が小川を閉じるのを忘れたことでした。
そこで、自分のコードを調べましたが、すべて問題ありません。しかし、それから私は面白い解決策を試し始め、close()を削除しました-そしてそれはうまくいきました!もちろん、奇妙です。そして、まったく予測できません。しかし、少なくとも私の場合は今解決されています。誰かがそれがJAVAのバグかもしれないと思いますか?そして多分それを適切に報告する方法を知っていますか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加