Runtime.getRuntime().exec();怎么写

gangan1121 2011-11-01 11:35:07
在java里调用cmd执行下面两句启动openOffice服务:

cd C:\Program Files\OpenOffice.org 3\program

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

用Runtime.getRuntime().exec();怎么用怎么写?

...全文
436 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kouyiSC 2011-11-01
  • 打赏
  • 举报
回复
struts的action中的调用,根据结果状态判断执行是否成功。。。

int count=databasebackupService.dataBackup(databaseBuckup);
if(count==0){
state="数据库备份成功";
filepath=databaseBuckup.getFilepathname();
}else{
state="由于未指定有效参数或服务器未安装ORACLE客户端,数据库备份失败!";
}
kouyiSC 2011-11-01
  • 打赏
  • 举报
回复
给你一个我以前的代码:
public class DatabaseBuckupDAOImpl extends HibernateDaoSupport implements DatabaseBackupDAO{

//数据库备份
public int dataBackup(DatabaseBuckup databaseBuckup){
String state="exp ";
String statevalue=" rows=y compress=n buffer=65536 feedback=100000";
int count=new DatabaseBR().StartRun(databaseBuckup, state, statevalue);
return count;
}

//数据库恢复
public int dataResume(DatabaseBuckup databaseBuckup){
String state="imp ";
String statevalue=" rows=y full=y buffer=65536 feedback=100000";
int count=new DatabaseBR().StartRun(databaseBuckup, state, statevalue);
return count;
}

//用线程的方式读取DOS窗口的输出内容
class StreamDrainer implements Runnable {
private InputStream ins;
public StreamDrainer(InputStream ins) {
this.ins = ins;
}
public void run(){
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(ins));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

//在dos下开始执行数据库备份与恢复
class DatabaseBR{

public DatabaseBR(){
}
public int StartRun(DatabaseBuckup databaseBuckup,String state,String statevalue)
{
int exitvalue=-1;
Runtime rt = Runtime.getRuntime();
Process processexp = null;

try{
//截取文件名称设置日志文件名
String file=" file=" + "'" + databaseBuckup.getFilepathname() + "'";
String logfilename=databaseBuckup.getFilepathname().substring(0,
databaseBuckup.getFilepathname().lastIndexOf("."));
String log=" log=" + "'" + logfilename + ".log" + "'";

//得到在dos下执行的命令
String exp = state + databaseBuckup.getDatabasename() + "/" +
databaseBuckup.getDatabasepassword() + "@" + databaseBuckup.getNetname() +
statevalue + file;
// String[] command={"cmd.exe", "/C", exp};
//开始执行命令
System.out.println(exp);
// processexp=rt.exec("su - oracle -c \"exp idtrustcard/idtrustcard@orcl_192.168.1.105 file=/opt/backup.dmp\"");
processexp=rt.exec(exp);
new Thread(new StreamDrainer(processexp.getInputStream())).start();
new Thread(new StreamDrainer(processexp.getErrorStream())).start();
processexp.getOutputStream().close();
//等待线程执行结束后返回
try {
exitvalue=processexp.waitFor();
System.out.println(exitvalue);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}catch(IOException e){
e.printStackTrace();
}

return exitvalue;
}
}
}
dntg007 2011-11-01
  • 打赏
  • 举报
回复
一次只能执行一个命令,最好把你想要实现的东西做成bat文件。java里只执行bat就完了
dntg007 2011-11-01
  • 打赏
  • 举报
回复
参数是字符串,在实际应该输入的命令前面加上cmd/c 就可以了。/还是\记不清了。/前面也许还有空格。太久了,都忘了。你试试吧
gangan1121 2011-11-01
  • 打赏
  • 举报
回复
cd C:\Program Files\OpenOffice.org 3\program

这个呢??

[Quote=引用 6 楼 huntor 的回复:]
Java code

Process soffice = new ProcessBuilder("soffice","-headless","-accept='socket,host=127.0.0.1,port=8100;urp;'","-nofirststartwizard").start();

............

soffice.destory();


我在li……
[/Quote]
huntor 2011-11-01
  • 打赏
  • 举报
回复
Process soffice = new ProcessBuilder("soffice","-headless","-accept='socket,host=127.0.0.1,port=8100;urp;'","-nofirststartwizard").start();

............

soffice.destory();

我在linux下可以启动、结束。
gangan1121 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dntg007 的回复:]
一次只能执行一个命令,最好把你想要实现的东西做成bat文件。java里只执行bat就完了
[/Quote]

一次只能执行一个命令?

对了我想问
process exec(string command, string[] envp, file dir)
在有指定环境和工作目录的独立进程中执行指定的字符串命令。

这个可以解决我的问题么?
我试了不行的 不知道是不是哪里没写对

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧