vanseparis 2014-08-08 08:14 采纳率: 0%
浏览 4365

这个poi把String写入word文档后,打开文档就报“打开文件错误”,求高人解决下

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class writeWord{
public static void main(String[] args) throws IOException{
byte[] a=new String("看见了!").getBytes("GBK");
ByteArrayInputStream bs = new ByteArrayInputStream(a);
POIFSFileSystem fs = new POIFSFileSystem();
///////////////////////////////////
DirectoryEntry directory = fs.getRoot();
DocumentEntry de = directory.createDocument("WordDocument", bs);
//以上两句代码不能省略,否则输出的是乱码
FileOutputStream fos = new FileOutputStream("D:\text111.doc");
fs.writeFilesystem(fos);
bs.close();
//fos.flush();
fos.close();
System.out.println("操作成功!");
}

}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 10:57
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你的代码在创建POIFS文件系统时使用了GBK编码。但是当你尝试将字符串转换为字节数组并写入到文件中时,你没有指定要使用的编码格式。

    你需要确保你的源字符串(在这里是"看见了!")以正确的编码格式存在,并且在你的目标文件中也以相同的编码格式保存。如果在你的目标文件中使用了不同的编码格式,那么当你读取它的时候就会出现错误。

    例如:

    public static void main(String[] args) throws IOException {
        String content = "看见了!";
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        content.getBytes("UTF-8").write(baos);
        byte[] bytes = baos.toByteArray();
    
        POIFSFileSystem fs = new POIFSFileSystem();
        DirectoryEntry directory = fs.getRoot();
        DocumentEntry de = directory.createDocument("WordDocument", bytes);
        
        FileOutputStream fos = new FileOutputStream("D:\\text111.doc");
        fs.writeFilesystem(fos);
        fos.close();
    }
    

    在这个例子中,我将字符串内容的每个字符都用UTF-8编码,然后将其写入到一个流中。然后,我再次使用同样的编码格式来创建一个新的POIFS文件系统和目录。这样,当我在目标文件中读取数据时,我就可以直接使用UTF-8编码了。

    评论

报告相同问题?