通过JAVA调用命令行程序

这是我在把数据导入到数据库时遇到问题,总结下来的。包含两个方法,一个方法是读取文件路径下的文件列表,主方法是执行cmd命令,在导入时想得到导入一个文件的时间,涉及到线程阻塞问题,这个问题理解不是很深,应该是执行cmd命令时,相当于开启了一个新的线程,如果需要线程执行完再开启新的线程,需要阻塞新线程,用到了WaitFor().

代码如下:

package loadFile;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.util.ArrayList;

/**JAVA 调用命令行加载数据到数据库中
 * @author ywf
 *
 */
public class LoadData {

	public static void main(String[] args) throws Exception {
		String path = "D:\\1";// 导入文件路径
		ArrayList<File> list = new ArrayList();
		getFile(list, path);
		String UERNAME = "SYSDBA";
		String PASSWORD = "szoscar55";
		String cmd = "oimpexp -F ";
		for (File f : list) {
			long time = System.currentTimeMillis();
			String command = cmd + "\"" + f.getPath() + "\"" + " -S SYSDBA -T "
					+ "\"MB_QL\""
					+ " -B 30 -A 1 -d 1 -H localhost -D OSRDB -p 2003 -U "
					+ UERNAME + " -P " + PASSWORD + " -Y UTF-8";
			System.out.println(command);
			Process pro = Runtime.getRuntime().exec("cmd /c " + command);
			int a = pro.waitFor();
			if (a != 0) {
				pro.destroy();
			}
			long time1 = System.currentTimeMillis();
			System.out.println(f.getName() + "执行结束.  时间为:" + (time1 - time)
					/ 1000 + "s");
		}
	}

	/**
	 * 文件夹下的文件列表
	 * @param fileAll
	 * @param path
	 * @throws Exception
	 */
	public static void getFile(ArrayList fileAll, String path) throws Exception {
		File files = new File(path);
		ArrayList<File> dirs = new ArrayList();// 存储文件夹
		// ArrayList <File> fileAll = new ArrayList<File>();//存储文件
		dirs.add(files);
		int index = 0;
		while (index < dirs.size()) {
			File file1 = dirs.get(index);
			if (file1.isDirectory()) {
				File[] fileList = file1.listFiles();
				for (int i = 0; i < fileList.length; i++) {
					File ff = fileList[i];
					if (ff.isFile()) {
						fileAll.add(ff);
					} else {
						dirs.add(ff);
					}
				}
			} else {
				fileAll.add(file1);
			}
			index++;
		}
	}
}

  对cmd命令不是很懂,程序中写的cmd /c +命令,也可以直接执行命令。我是参照下面这篇文章加上的

http://wenku.baidu.com/view/6e80a982e53a580216fcfea4.html

posted on 2013-08-17 16:49  ywf—java  阅读(1007)  评论(0编辑  收藏  举报

导航