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

2017-03-16  本文已影响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");

}

}

上一篇下一篇

猜你喜欢

热点阅读