zip入力または出力ストリームでzipファイルを開くことに関する回答は探していません。私の質問は、Javaでjarファイルを他のファイルと同じように(バッファリングされたリーダー/ライターを使用して)単に開き、その内容を読み取り、別の場所に書き込むことは可能ですか? 例えば:
import java.io.*;
public class zipReader {
public static void main(String[] args){
BufferedReader br = new BufferedReader(new FileReader((System.getProperty("user.home").replaceAll("\\\\", "/") + "/Desktop/foo.zip")));
BufferedWriter bw = new BufferedWriter(new FileWriter((System.getProperty("user.home").replaceAll("\\\\", "/") + "/Desktop/baf.zip")));
char[] ch = new char[180000];
while(br.read(ch) > 0){
bw.write(ch);
bw.flush();
}
br.close();
bw.close();
}
}
これは一部の小さな zip/jar ファイルで機能しますが、ほとんどの場合、ファイルが破損して解凍または実行できなくなります。char[] のサイズを 1 に設定しても、ファイルは破損せず、その中のすべてが破損することがわかりました。つまり、アーカイブ プログラムでファイルを開くことはできますが、そのすべてのエントリが破損して使用できなくなります。ファイルが破損しないように上記のコードを記述する方法を知っている人はいますか? また、これをテストしたjarファイルの行が破損しました。
nèñà?G¾Þ§
V
¨ö—‚?‰9³'?ÀM·p›a0„èwåÕüaEܵp‡aæOùR‰(JºJ´êgžè*?”6ftöãÝÈ—ê@qïc3âi,áž…¹¿Êð)V¢cã>Ê”G˜ (†®9öCçM?€ÔÙÆC†ÑÝ×ok?ý—¥úûFs.‡</p>
対オリジナル:
nèñàG¾Þ§
V
¨ö—‚‰9³'ÀM·p›a0„èwåÕüaEܵp‡aæOùR‰(JºJ´êgžè*?”6ftöãÝÈ—ê@qïc3âi,áž…¹¿Êð)V¢cã>Ê”G˜(†®9öCçM €ÔÙÆC†ÑÝ×oký—\úûFs.‡</p>
ご覧のとおり、リーダーまたはライターのいずれかが ? をファイルに追加しますが、その理由がわかりません。繰り返しますが、エントリごとに開くようにという回答は望んでいません。その方法はすでに知っています。誰かが私の質問に対する回答を知っている場合は、それを共有してください。