首页 新闻 会员 周边 捐助

使用IO读取office 2007文档遇到很诡异的问题

0
悬赏园豆:5 [已关闭问题] 关闭于 2013-05-22 19:21

使用java的IO读取office2007的文档,然后写入到另一个文件,再打开文件出现错误提示

而同样的代码打开offfice 2003的文件没有任何问题

java代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class ReadDoc {
    public static void main(String[] args) throws Exception {
        File file = new File("C:\\Users\\Administrator\\Desktop\\功能测试文档.docx");
        FileInputStream fis = new FileInputStream(file);
        File file1 = new File("C:\\Users\\Administrator\\Desktop\\test.docx");
        FileOutputStream fos = new FileOutputStream(file1);
        byte[] bytes = new byte[1024];
        while(-1 != fis.read(bytes)) {
            fos.write(bytes);
        }
        fos.close();
        fis.close();
        System.out.println("over..........");
    }
}
泱泱的主页 泱泱 | 初学一级 | 园豆:2
提问于:2013-05-22 18:12
< >
分享
所有回答(1)
0

因为是每次都读取1024个字节,可能最后一次读取的不到1024,但写入1024个字节,导致写入的文件比原始文件大,所以出现上述问题,代码调整如为如下方式,问题解决:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class ReadDoc {
    public static void main(String[] args) throws Exception {
        File file = new File("C:\\Users\\Administrator\\Desktop\\功能测试文档.docx");
        FileInputStream fis = new FileInputStream(file);
        File file1 = new File("C:\\Users\\Administrator\\Desktop\\test.docx");
        FileOutputStream fos = new FileOutputStream(file1);
        int len = 0;
        while(-1 != (len = fis.read())) {
            fos.write(len);
        }
        fos.close();
        fis.close();
        System.out.println("over..........");
    }
}

[Java]读取文件方法大全

泱泱 | 园豆:2 (初学一级) | 2013-05-22 19:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册