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]);
              } 

元のファイルがアラビア語で書かれているため、作成された zip ファイルを 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 に答える