Hello Java Developers,
以下是该情景:
假设我有一个名为sample.txt
的文本文件。我真正想要做的是将sample.txt
文件放入名为*.zip
的{{1}}文件中。
这是我到目前为止所学到的。
TextFiles.zip
我的代码到目前为止创建了一个try{
File f = new File(compProperty.getZIP_OUTPUT_PATH());
zipOut = new ZipOutputStream(new FileOutputStream(f));
ZipEntry zipEntry = new ZipEntry("sample.txt");
zipOut.putNextEntry(zipEntry);
zipOut.closeEntry();
zipOut.close();
System.out.println("Done");
} catch ( Exception e ){
// My catch block
}
文件并插入*.zip
文件
我的问题是如何将现有文件插入到创建的sample.txt
文件中?
如果您的回答与TrueZIP有关,请发布SSCCE。
我做了以下几点:
答案 0 :(得分:8)
使用内置的Java API。这将向Zip文件添加一个文件,这将替换可能存在的任何现有Zip文件,从而创建一个新的Zip文件。
public class TestZip02 {
public static void main(String[] args) {
try {
zip(new File("TextFiles.zip"), new File("sample.txt"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void zip(File zip, File file) throws IOException {
ZipOutputStream zos = null;
try {
String name = file.getName();
zos = new ZipOutputStream(new FileOutputStream(zip));
ZipEntry entry = new ZipEntry(name);
zos.putNextEntry(entry);
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
byte[] byteBuffer = new byte[1024];
int bytesRead = -1;
while ((bytesRead = fis.read(byteBuffer)) != -1) {
zos.write(byteBuffer, 0, bytesRead);
}
zos.flush();
} finally {
try {
fis.close();
} catch (Exception e) {
}
}
zos.closeEntry();
zos.flush();
} finally {
try {
zos.close();
} catch (Exception e) {
}
}
}
}
答案 1 :(得分:3)
答案 2 :(得分:1)
根据the epic JDK reference,您似乎可以使用while zis.getNextEntry() != null
循环遍历文件(其中zis是ZipInputStream),然后使用zis.read()
读取数组,发送到ArrayList或类似的。
然后,可以将toArray()
,"cast" it to a byte
array with this method和zos.write()
用于输出ZIP文件(其中zos是ZipOutputStream
),使用zos.putNextEntry()
来创造新的条目。 (您需要保存ZipEntry并使用ze.getName()
获取其名称,ze
为ZipEntry
。)您应该将T
替换为Byte
和{ {1}}(除byte
循环体之外的任何地方使用byte
并且可能需要修改强制转换代码以使用for
从Byte.byteValue()
(包装器类)转换为Byte
(原始类型),如下所示:
byte
请注意,这是未经测试的,并且基于JDK(条目for(int i = 0; i < objects.length; i++) {
convertedObjects[i] = (Byte)objects[i].byteValue();
}
,ZipInputStream
,ZipOutputStream
和ArrayList
)以及谷歌搜索数组广告。
对不起,如果那有点密集,希望这有帮助!!