通过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 ...
随机推荐
- BZOJ1068 [SCOI2007]压缩 【区间dp】
题目 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位 ...
- python输出字典中的中文
如果不用本文指定的方法,会有如下报错: UnicodeDecodeError: 'utf8' codec can't decode byte 0xbf in position 2: invalid s ...
- A* k短路 学习笔记
题目大意 n个点,m条边有向图,给定S,T,求不严格k短路 n<=1000 m<=100000 k<=1000 不用LL 分析 A*算法 f(i)表示从S出发经过i到T的估价函数 \ ...
- Oracle Dual 表详解
1.DUAL表的用途Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中--查看当前连接用户SQL> select user from dua ...
- LeetCode OJ——Convert Sorted Array to Binary Search Tree
http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 将一个升序的数组转换成 height balan ...
- java中线程切换的开销
思路: 开三个线程A,B,C 线程A不断的调用LockSupport.park()阻塞自己,一旦发现自己被唤醒,调用Thread.interrupted()清除interrupt标记位,同时增加自增计 ...
- boost::function和boost::bind 介绍
一. boost::function介绍 原文:http://www.cnblogs.com/sld666666/archive/2010/12/16/1907591.html 本片文章主要介绍boo ...
- hdu6223(后缀数组)
题意: 给一个长度为n的字符串s[0..n-1],但i的后继不再是i+1,而是(i*i+1)%n,求所有长度为n的“子串”中,字典序最大的是谁 n<=150000 分析: 如果是一般的字符串,那 ...
- ios等待ualertview弹出动画完成后再跳转至其他页面
[self performSelector:@selector(popView:) withObject:nil afterDelay:2.0];
- 10.【nuxt起步】-引用mintui
这时候我们完成了list.vue,但是怎么返回index.vue,这时候需要这个头部返回 1.我们使用现成的minu-ui,eleme的开源移动端 ,参考 https://www.cnblogs.co ...