java 调用java命令行_通过JAVA调用命令行程序

本文介绍了一种使用Java调用命令行工具`oimpexp`将数据导入数据库的方法。作者通过创建`LoadData`类,读取指定路径下的文件,并通过`Runtime.getRuntime().exec()`执行命令行操作。在执行过程中,处理了线程阻塞问题,确保每个文件导入完成后才开始下一个。主要涉及的知识点包括文件遍历、命令行参数构造以及线程等待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我在把数据导入到数据库时遇到问题,总结下来的。包含两个方法,一个方法是读取文件路径下的文件列表,主方法是执行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 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 dirs = new ArrayList();// 存储文件夹

// ArrayList fileAll = new ArrayList();//存储文件

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 +命令,也可以直接执行命令。我是参照下面这篇文章加上的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值