通过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
通过JAVA调用命令行程序的更多相关文章
- JAVA调用命令行2
package loadMBQL; import java.io.File; import java.io.FilenameFilter; public class LoadMBQL { /** * ...
- Java带包结构调用命令行运行编译
原文: https://www.toutiao.com/i6491809562037846542/ 带包结构调用命令行运行编译. 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 分 ...
- 软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序
软件工程第三个程序:“WC项目” —— 文件信息统计(Word Count ) 命令行程序 格式:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数 ...
- QT中QProcess调用命令行的痛苦经历
在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了 ...
- [Java] cmd命令行如何切换目录
cmd.exe是微软Windows系统基于WINDOWS上的命令解释程序,类似于微软的DOS操作系统.cmd.exe是一个32位的命令行程序,运行在Windows NT/2000/XP/2003/vi ...
- QT中QProcess调用命令行的痛苦经历(调用Winrar,设置工作目录,获得输出,注意引号与括号,等等)
QT中QProcess调用命令行的痛苦经历 阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在Q ...
- myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)
1.Github项目地址 https://github.com/baiyexing/myapp.git 2.功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 功能(已全部实现) 使用 -n ...
- Node: 开发命令行程序
CLI 的全称是 Command-line Interface (命令行界面),即在命令行接受用户的键盘输入并作出响应和执行的程序. 在 Node.js 中,全局安装的包一般都具有命令行界面的功能,例 ...
- 2019-11-29-dotnet-使用-System.CommandLine-写命令行程序
title author date CreateTime categories dotnet 使用 System.CommandLine 写命令行程序 lindexi 2019-11-29 08:33 ...
随机推荐
- 如何用1个小时了解JSON
W3school ↑↑↑学这个,1个小时够了.下面是节选: 代码例子1: <html> <body> <h2>在 JavaScript 中创建 JSON 对象< ...
- 学习struts2及MVC
1.MVC模式基础 1.1.MVC模式简介 MVC是一种架构型模式,它本身并不引入新的功能,只是用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而达到更好的开发和维护效率.在MVC模式中 ...
- svg优雅降级技术
这是一个名叫Alexey Ten首先提出来的,类似下面的代码: <svg width="96" height="96"> <image xli ...
- FOJ Problem 2253 Salty Fish
...
- C语言第三题
1.完成char *p,char *q 的字符串比较,相等返回1,错误返回-1 2.用户需要计算的2个20位数数字的加法,写程序实现让用户输入两个20位以上的数字并且相加,输出结果
- C++拷贝(复制)构造函数详解
原文:http://blog.csdn.net/lwbeyond/article/details/6202256/[侵删] 一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单 ...
- Windows下php环境变量的配置
1.找到php的路径比如"E:\php_env\PHP". 2.需要保证该目录下php.ini的配置是正确的,如果是刚下载的php包,则可能需要修改相应的一些配置:将php目 ...
- Codeforces Gym101502 J-取数博弈
还有J题,J题自己并不是,套的板子,大家写的都一样,因为大家都是套板子过的,贴一下代码,等学会了写一篇博客... J.Boxes Game 代码: 1 //J. Boxes Game-取数博弈-不会, ...
- MySQL 几种调式分析利器
目录 pstack gdb strace perf pstack 获取堆栈信息 问题线程的定位 负载较低 mysql_pid=4522 pstack $mysql_pid>pstack.info ...
- POI2004
11th Polish Olympiad in Informatics(POI2004) <br > 填坑计划第二弹......把这个没填完的坑搬过来啦~ 上次勉强填完NEERC的坑... ...