读取docx文档中的姓名并重命名文档

需要用到的框架,poi,把下载的zip内所有的jar引用到项目中。

代码如下:

import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.xmlbeans.XmlException;

import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) throws IOException {
//        XWPFWordExtractor wordExtractor = new XWPFWordExtractor();
        File[] fs;
        File outDir;

        /*当file不存在时都是false
        File tmp = new File("/Users/ge.su/Desktop/2018年度工作互评表.docx");
        System.out.println("is dir "+tmp.isDirectory());
        System.out.println("is file "+tmp.isFile());
        */

//        获取到的路径带..,getAbsolutePath也带,getCanonicalPath会转换成/sdcard/test
//        File tp = new File("/sdcard/Download/../test");
//        System.out.println(tp.getParent()+"="+tp.getParentFile().getAbsolutePath()+"="+tp.getCanonicalPath());

        System.out.println(args.length);

        if (args.length < 1) {
            System.out.println("请输入要转换名字的目录或单个文件!参考如下示例:");
            System.out.println("xx.jar /Users/ge.su/Desktop/2018年度工作互评表.docx");
            System.out.println("也可以指定改名后保存的目录!参考如下示例:");
            System.out.println("xx.jar /Users/ge.su/Desktop/2018年度工作互评表.docx /Users/ge.su/Desktop/new");
            return;
        } else if (args.length > 2) {
            System.out.println("太多的参数");
            return;
        } else {
            String in = args[0];
            File inFile = new File(in);
            if (!inFile.exists()) {
                System.out.println(in+" 不存在!");
                return;
            } else if (!inFile.canRead()) {
                System.out.println(in+" 不可读!");
                return;
            } else if (inFile.isDirectory()) {
                System.out.println(in + " 为目录!");
                File[] files = inFile.listFiles();
                List list = new ArrayList<>();
                if (files != null && files.length > 0) {
                    System.out.println("拥有" + files.length + "个文件!");
                    for (int i = 0; i < files.length; i++) {
                        if (files[i].isDirectory()) {
                            System.out.println(files[i] + " 为目录,暂不处理!");
                        } else {
                            list.add(files[i]);
                        }
                    }

//                    fs = (File[]) list.toArray();
                    fs = new File[list.size()];
                    for (int i = 0; i < list.size(); i++) {
                        fs[i] = list.get(i);
                    }

                } else {
                    System.out.println(inFile+" 为空目录!");
                    return;
                }
//                fs = files;
            } else {
                System.out.println(in + " 为文件!");
                fs = new File[]{inFile};
            }

            if (args.length == 2) {
                String out = args[1];
                File outFile = new File(out);
                if (outFile.isFile() && outFile.exists()) {
                    System.out.println(out + " 是文件,请选择目录!");
                    return;
                }

                if (!outFile.exists()) {
                    boolean mkdirs = outFile.mkdirs();
                    if (!mkdirs) {
                        System.out.println("创建" + out + " 目录失败");
                        return;
                    }
                }

                outDir = outFile;

            } else {
                outDir = inFile.isFile() ? inFile.getParentFile() : inFile;
            }

        }

//        String file = "/Users/ge.su/Desktop/2018年度工作互评表.docx";

        for (int i = 0; i < fs.length; i++) {
            String file = fs[i].getAbsolutePath();
            XWPFDocument docx = null;
            BufferedReader br = null;
            boolean findName = false;
            StringBuffer sb = new StringBuffer();
            String[] match = new String[]{"姓名:", "姓名:"};
            try {
                docx = new XWPFDocument(
                        new FileInputStream(file));

                //using XWPFWordExtractor Class
                XWPFWordExtractor we = new XWPFWordExtractor(docx);
                String text = we.getText();

                br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(text.getBytes(Charset.forName("utf8"))), Charset.forName("utf8")));
                String line;

                while ((line = br.readLine()) != null) {
    //            if(!line.trim().equals("")){
    //                line="
"+line;//每行可以做加工 // sb.append(line+"\r\n"); // } // line = line.trim(); int who = -1; /* if (line.startsWith(match[0])) { who = 0; } else if (line.startsWith(match[1])) { who = 1; } */ String trim = null; for (int y = 0; y < match.length; y++) { if (line.startsWith(match[y])) { who = y; System.out.println(line); trim = line.trim(); break; } } if (who != -1) { trim = subStr(trim, match[who].length()); System.out.println(trim); File source = new File(file); // File parentFile = source.getParentFile(); File out = new File(outDir, "2018年度工作互评表." + trim + ".docx"); boolean b = source.renameTo(out); if (b) { System.out.println(file + " -> " + out.getAbsolutePath()); } else { System.out.println(file + " 重命名失败,检测目录是否有权限!"); } findName = true; break; } else { /* for (String s : match) { sb.append(s).append(";"); } System.out.println(file+" 内未发现 "+sb.toString()); */ } /* if (line.startsWith("姓名:")) { System.out.println(line); String trim = line.trim(); trim = trim.substring("姓名:".length()); System.out.println(trim); File source = new File(file); File parentFile = source.getParentFile(); source.renameTo(new File(parentFile, "2018年度工作互评表." + trim + ".docx")); } else if (line.startsWith("姓名:")) { System.out.println(line); String trim = line.trim(); trim = trim.substring("姓名:".length()); System.out.println(trim); File source = new File(file); File parentFile = source.getParentFile(); source.renameTo(new File(parentFile, "2018年度工作互评表." + trim + ".docx")); } */ } } catch (IOException e) { e.printStackTrace(); }finally { if (!findName) { for (String s : match) { sb.append(s).append(";"); } System.out.println(file+" 内未发现 "+sb.toString()); } if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } // System.out.println(we.getText()); } } private static String subStr(String str, int index) { return str.substring(index); } }

 

你可能感兴趣的:(Java,docx)