美文网首页
文件扫描多目录,并将doc格式转成pdf

文件扫描多目录,并将doc格式转成pdf

作者: 喝旺仔不喝旺仔 | 来源:发表于2017-03-16 10:41 被阅读25次

    /**

    *

    */

    package main;

    import java.io.File;

    import java.util.HashMap;

    import java.util.Iterator;

    import java.util.Map;

    import java.util.Set;

    /**

    *@Copyright (c), 2012-2016,DaZhi NetWork.Co.,Ltd

    *@package main

    *@FileName:Test3.java

    *@Author:wang.huaqun

    *@Date:2017-3-16

    *@Description:

    *@Vesion:1.0

    */

    public class Test3 implements Runnable{

    /**

    * 监控的文件路径

    */

    private static String dir;

    /**

    * 扫描间隔时间以秒为单位

    */

    private static int period;

    /**

    * 原有文件信息

    */

    private static Map < String, String > oldDirFileMap;

    /**

    * 初始化相关数据

    * @return

    */

    public static void dirMonitor(String dir, int period) {

    Test3.dir = dir;

    Test3.period = period;

    Test3.oldDirFileMap = new HashMap < String, String >();

    }

    /**

    * 线程的执行。对于修改文件的情况,则视为删除与增加两个操作。

    */

    public void run() {

    boolean isError = false;

    File file = new File(dir);

    // 初始化开始监控时的文件路径状态

    totalScan(file, oldDirFileMap);

    // 展示原有路径下的文件信息

    displayNowFile();

    while (!isError) {

    try {

    Thread.sleep(period * 1000);

    // 指定时间间间隔后扫描路径

    Map < String, String > nowDirFileMap = new HashMap < String, String >();

    totalScan(file, nowDirFileMap);

    // 得到删除的文件及文件夹

    getDeletedFile(nowDirFileMap);

    // 得到新增的文件及文件夹

    getAddedFile(nowDirFileMap);

    // 注意:由于涉及到修改,所以一定要先检测删除的文件,然后再检测新增加的文件

    } catch (InterruptedException e) {

    System.out.println("对指定的文件路径进行监控时产生异常,异常信息为:" + e.getMessage());

    isError = true;

    }

    }

    }

    /**

    * 递归扫描整个路径

    * @param dir

    * @param ndir

    * @param dirFileMap 存放扫描结果

    */

    private void totalScan(File file, Map < String, String > dirFileMap) {

    String[] fileList = file.list();

    // 判断是否为空目录

    if (null != fileList) {

    for (int i = 0; i < fileList.length; i++) {

    String pname = file.getAbsolutePath() + "\\" + fileList[i];

    File tempFile = new File(pname);

    if (tempFile.isDirectory()) {

    dirFileMap.put(pname, "文件夹:\t" + pname);

    totalScan(tempFile, dirFileMap);

    } else {

    // 不相同的文件夹下,存放的文件可能名字相同,但是同一路径下的文件肯定不会相同,

    // 所以采用全路径做为key值

    dirFileMap.put(pname, "文件:\t" + pname);

    }

    }

    }

    }

    /**

    * 得到增加的文件及文件夹,并增加到已有的文件信息中

    */

    private void getAddedFile(Map < String, String > nowDirFileMap) {

    for (Iterator < String > iterator = nowDirFileMap.keySet().iterator(); iterator.hasNext();) {

    String key = iterator.next();

    if (null == oldDirFileMap.get(key)) {

    oldDirFileMap.put(key, nowDirFileMap.get(key));

    System.out.println("新增" + nowDirFileMap.get(key));

    }

    }

    }

    /**

    * 得到删除的文件及文件夹,并删除已经不存在的文件信息

    */

    private void getDeletedFile(Map < String, String > nowDirFileMap) {

    for (Iterator < String > iterator = oldDirFileMap.keySet().iterator(); iterator.hasNext();) {

    String key = iterator.next();

    if (null == nowDirFileMap.get(key)) {

    System.out.println("删除" + oldDirFileMap.get(key));

    iterator.remove();

    oldDirFileMap.remove(key);

    }

    }

    }

    /**

    * 展示原有文件

    */

    private void displayNowFile() {

    System.out.println(dir + "路径原有文件目录如下:\n");

    Set set = oldDirFileMap.keySet();

    Iterator < String > iterator = set.iterator();

    while (iterator.hasNext()) {

    System.out.println(oldDirFileMap.get(iterator.next()));

    }

    System.out.println("========================");

    }

    /**

    * just for test

    * @param args

    */

    public static void main(String[] args) {

    Test3 ts = new Test3();

    Test3.dirMonitor("D:\\temp12345", 5);

    ts.run();

    }

    }

    ==========================分割===================================

    /**

    *

    */

    package com.dazhi.trsapp.util;

    import java.io.File;

    import com.jacob.activeX.ActiveXComponent;

    import com.jacob.com.ComThread;

    import com.jacob.com.Dispatch;

    import com.jacob.com.Variant;

    /**

    *@Copyright (c), 2012-2016,DaZhi NetWork.Co.,Ltd

    *@package com.dazhi.trsapp.util

    *@FileName:WordtoPdf.java

    *@Author:wang.huaqun

    *@Date:2017-2-10

    *@Description:

    *@Vesion:1.0

    */

    public class WordtoPdf {

    static final int wdFormatPDF = 17;// PDF 格式

    public void wordToPDF(String sfileName,String toFileName){

    long start = System.currentTimeMillis();

    ActiveXComponent app = null;

    Dispatch doc = null;

    try {

    app = new ActiveXComponent("Word.Application");

    app.setProperty("Visible", new Variant(false));

    Dispatch docs = app.getProperty("Documents").toDispatch();

    doc = Dispatch.call(docs,  "Open" , sfileName).toDispatch();

    File tofile = new File(toFileName);

    if (tofile.exists()) {

    tofile.delete();

    }

    Dispatch.call(doc,

    "SaveAs",

    toFileName, // FileName

    wdFormatPDF);

    long end = System.currentTimeMillis();

    } catch (Exception e) {

    System.out.println(sfileName+"========Error:文档转换失败:" + e.getMessage());

    } finally {

    Dispatch.call(doc,"Close",false);

    if (app != null)

    app.invoke("Quit", new Variant[] {});

    }

    //如果没有这句话,winword.exe进程将不会关闭

    ComThread.Release();

    }

    public static void main(String[] args) {

    WordtoPdf d = new WordtoPdf();

    d.wordToPDF("E:\\321.doc", "E:\\test_321test.pdf");

    }

    }

    相关文章

      网友评论

          本文标题:文件扫描多目录,并将doc格式转成pdf

          本文链接:https://www.haomeiwen.com/subject/govdnttx.html