天天看點

使用Java程式解析word文檔裡包含的圖檔資訊

package youdao;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public class WordPictureExtractor {

    public final static String FOLDER = "C:\\Users\\i042416\\Pictures\\WORD\\";

    public static void main(String[] args) throws Exception {
        try {
            readZipFile("C:\\Users\\i042416\\Pictures\\1.docx");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void copyImage(String fileName, InputStream input) {
        try {
            String[] result = fileName.split("/");
            String outputFileName = FOLDER + result[2];
            FileOutputStream fileOutputStream = new FileOutputStream(new File(
                    outputFileName));
            ByteArrayOutputStream output = new ByteArrayOutputStream();

            byte[] buffer = new byte[1024];
            int length;

            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

            fileOutputStream.write(output.toByteArray());
            input.close();
            fileOutputStream.close();
            System.out.println("File: " + outputFileName
                    + " copied successfully!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void readZipFile(String file) throws Exception {
        ZipFile zf = new ZipFile(file);
        InputStream in = new BufferedInputStream(new FileInputStream(file));
        ZipInputStream zin = new ZipInputStream(in);
        ZipEntry ze;
        while ((ze = zin.getNextEntry()) != null) {
            if (ze.isDirectory()) {
                continue;
            }
            String fileName = ze.getName();
            if (!fileName.contains("word/media/image"))
                continue;
            System.out.println(fileName + " : " + ze.getSize() + " bytes");
            long size = ze.getSize();
            if (size > 0) {
                InputStream image = zf.getInputStream(ze);
                copyImage(fileName, image);
            }
        }
        zin.closeEntry();
        zin.close();
        zf.close();
    }
}