Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用阿拉伯语字符创建zip文件_Java_File_Encoding_Zip_Apache Poi - Fatal编程技术网

Java 使用阿拉伯语字符创建zip文件

Java 使用阿拉伯语字符创建zip文件,java,file,encoding,zip,apache-poi,Java,File,Encoding,Zip,Apache Poi,我有以下情况 我必须修改一个现有的文件并返回一个包含这些修改文件的zip文件,我在web应用程序上下文中 到目前为止,我所做的是: ///////////////// modifying the existing file with poi librairy FileInputStream inpoi = new FileInputStream("file_path"); POIFSFileSystem fs = new POIFSFileSyste

我有以下情况 我必须修改一个现有的文件并返回一个包含这些修改文件的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]);
              } 
//使用poi库修改现有文件
FileInputStream inpoi=新的FileInputStream(“文件路径”);
POIFSFISTEM fs=新的POIFSFISTEM(inpoi);
HWPF文件文件=新的HWPF文件(fs);
Range r=doc.getRange();
r、 替换文本(“测试”);
字节[]b=doc.getDataStream();
////////////////////////创建zip文件并将修改后的文件复制到其中
ZipOutputStream out=newzipoutpstream(newfileoutputstream(“my.zip”));
out.putNextEntry(新ZipEntry(“文件”));
对于(int j=0;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());
                }
试试看{
FileInputStream inpoi=newfileinputstream(“C:\\Users\\free\\Desktop\\myworkspace\\gestionRH\\WebRoot\\fiches\\burn.doc”);
POIFSFISTEM fs=新的POIFSFISTEM(inpoi);
HWPF文件文件=新的HWPF文件(fs);
Range r=doc.getRange();
r、 替换文本(“测试”);
字节[]流=doc.getDataStream();
字符串编码=“utf-16”;
ZipOutputStream out=newzipoutpstream(newfileoutputstream(“yyy.zip”);
ZipEntry-ZipEntry=新的ZipEntry(“file.doc”);
OutputStreamWriter writer=新的OutputStreamWriter(输出,“utf-8”);
out.putNextEntry(zipEntry);
对于(int j=0;j

它不起作用

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

读写方法也有一个编码参数

ZipFile允许您设置正确的编码

ZipFile(字符串名称、字符串编码)
打开给定的文件进行读取,假定文件名采用指定的编码,扫描unicode额外字段。

java zip实现中有一个旧错误。它应该在v7中固定

看看这个答案:我不认为这是编码的问题,因为我试过用法语文件,我认为这是正确读取流的问题。我不认为这是编码的问题,因为我试过用法语文件,我认为这是正确读取流的问题。你的java版本号是什么?你说的版本号是什么意思?如果我运行“java-version”,我会得到类似的东西。。。Java(TM)SE运行时环境(build 1.7.0-b147)”。IMO b147是构建的基础。bug数据库告诉我们,从b57开始,它应该被修复。所以它应该在我的机器上工作。我将在未来几天测试它。