1

我有以下情况,我必须修改现有文件并返回包含此修改文件的 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());
                }

它不起作用

4

2 回答 2

2

java zip 实现中有一个老错误。它应该在 v7 中修复。http://bugs.sun.com/view_bug.do?bug_id=4244499

于 2012-09-26T11:01:30.357 回答
1

您可能还想使用 apache commons-io FileUtils 为 Java 文件操作提供了很多方便的方法 - 读取和写入文件等...

read 和 write 方法也有一个编码参数。

http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html

ZipFile 允许您设置正确的编码。

ZipFile(String name, String encoding) 打开给定文件进行读取,假设文件名的指定编码,扫描 unicode 额外字段。

于 2012-09-26T09:36:08.150 回答