我有以下情况 我必须修改现有文件并返回包含此修改文件的zip,我在Web应用程序上下文中 我现在所做的是:
///////////////// modifying the existing file with poi librairy
FileInputStream inpoi = new FileInputStream("file_path");
POIFSFileSystem fs = new POIFSFileSystem(inpoi);
HWPFDocument doc = new HWPFDocument(fs);
Range r = doc.getRange();
r.replaceText("<nomPrenom>","test");
byte[] b = doc.getDataStream();
//////////////////////// create the zip file and copy the modified files into it
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("my.zip"));
out.putNextEntry(new ZipEntry("file"));
for (int j = 0; j < b.length; j++) {
out.write(b[j]);
}
如果原始文件在阿拉伯语中被写错,则无法使用word正确读取创建的压缩文件
我试过这个:
try {
FileInputStream inpoi = new FileInputStream("C:\\Users\\free\\Desktop\\myworkspace\\gestionRH\\WebRoot\\fiches\\blame.doc");
POIFSFileSystem fs = new POIFSFileSystem(inpoi);
HWPFDocument doc = new HWPFDocument(fs);
Range r = doc.getRange();
r.replaceText("<nomPrenom>","test");
byte[] stream= doc.getDataStream();
String encoding = "utf-16";
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("yyy.zip"));
ZipEntry zipEntry = new ZipEntry("file.doc");
OutputStreamWriter writer = new OutputStreamWriter(out,"utf-8");
out.putNextEntry(zipEntry);
for (int j = 0; j < stream.length; j++) {
writer.write(stream[j]);
}
writer.close();
} catch (IOException e) {
System.out.println(e.toString());
}
它不起作用
答案 0 :(得分:2)
java zip实现中存在一个旧错误。它应该在v7中修复。 http://bugs.sun.com/view_bug.do?bug_id=4244499
答案 1 :(得分:1)
您可能还想使用apache commons-io FileUtils为Java File操作提供了许多方便的方法 - 读取和写入文件等...
读取和写入方法也有编码参数。
http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html
ZipFile允许您设置正确的编码。
ZipFile(String name,String encoding) 打开给定的文件进行读取,假定指定的文件名编码,扫描unicode额外字段。