我不是在寻找任何涉及在 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>
正如您所看到的,读者或作者都将?添加到文件中,我不知道为什么。同样,我不希望任何答案告诉我逐个打开它,我已经知道该怎么做,如果有人知道我的问题的答案,请分享。