如何从Java提供cmd命令的输入

时间:2014-11-07 04:53:33

标签: java mysql cmd

我是这个控制台问题的新手。我只是创建一个执行少量命令行的应用程序。我有一个命令

mysql -u root -p

用于打开MySQL控制台 在这里,我该如何输入密码?
我做了: -

cd c:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin
   && mysql -u root -p && root && create database testingdb; 
   && quit && mysql –u root –p testingdb < mysql_dump.testingdb.sql 

这里,第一个输入是root,它是password,第二个mysql_dump.testingdb.sql是位于mysql_dump包中的sql文件。
这不起作用,即使cmd控制台窗口关闭,也会打开一个线程。

java在这种情况下如何工作?

2 个答案:

答案 0 :(得分:0)

您可以使用Runtime类来执行OS命令。由于我没有安装mysql安装canot检查提到的senario。使用cmd命令检查。

    Runtime rt = Runtime.getRuntime();
    Process pr = rt.exec("mysql -u root -p");  
    InputStream is = pr.getInputStream();
    BufferedReader in = new BufferedReader(new InputStreamReader(is));
    String inputLine;
    while ((inputLine = in.readLine()) != null){
        System.out.println(inputLine); 
    }

答案 1 :(得分:0)

运行命令

ProcessBuilder提供了启动命令的完整API。

ProcessBuilder processBuilder = new ProcessBuilder("mysql", "-u", "root", "-p");
processBuilder.directory(new File("myDir"));
pb.redirectErrorStream(true);
Process proc = pb.start();

管道进入命令

你可以将字符串写入BufferedWriter,它包含了容易引起混淆的&#34;输出&#34;来自processBuilder.start()

返回的Process对象的流
OutputStream stdin = proc.getOutputStream();
OutputStreamWriter osr = new OutputStreamWriter(stdin);
BuffererWriter bw = new BuffererWriter(osr);
bw.write("Hello\n");

一句警告

使用Process消耗标准输出/错误流时需要非常小心,否则进程可能会锁定。一个健壮的实现应该创建2个线程来异步读取stdout和stderr,并且可能是第3个来提供进程。

  

父进程使用这些流(#getInputStream(),   getErrorStream())将输入提供给子进程并从子进程获取输出。因为某些本机平台仅提供有限的缓冲区   标准输入和输出流的大小,无法及时写入   输入流或读取子进程的输出流可能会导致   要阻止的子进程,甚至是死锁。

本指南When Runtime.exec() won't包含您需要的所有信息。