繁体   English   中英

从Java文件执行命令

[英]executing commands from a java file

import java.io.*;

public class chk 
{
String className;
String command,command1,command2;
public String  getMsg(String fileName,String Path) 
{
    String dir;
    command1="cd "+Path;
    dir=Path.charAt(0)+Path.charAt(1)+"";
    command2=dir;
command = "javac " + fileName;
    String a=executeCommand(command1);
    a=executeCommand(command2);
String output = executeCommand(command);
if(output.compareTo("")==0)             
        output = "Compilation Successfull!!";
    return output;
}
private String executeCommand(String command) 
{
    StringBuffer output = new StringBuffer();
    Process p;
    try 
    {
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader1 = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        BufferedReader reader2 = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = "";           
        while ((line = reader1.readLine())!= null) 
        {
            output.append(line + "\n");
        }
        while ((line = reader2.readLine())!= null) 
        {
            output.append(line + "\n");
        }
    } catch (Exception e) 
    {
        e.printStackTrace();
    }
    return output.toString();
}
public static void main(String args[])throws IOException
{
        String x;
    chk ob=new chk();
    x=ob.getMsg("MyClass.java","D:\test");
    System.out.println("OUtput : "+x);
}
}

错误

在此处输入图片说明

我试图借助Java文件在命令提示符下运行一堆命令,以便以后可以编译另一个Java文件“ MyClass.java”,该文件存在于计算机的其他驱动器中,但是我得到了以下内容错误说明它甚至无法执行我的第一个命令,即“ command1 =“ cd” + Path;“ 这条线。 请帮助!

cd不是Windows上的程序。 如果打开“命令提示符”窗口,则会运行cmd.exe程序,该程序输入并处理命令。 许多命令将导致程序被执行,但是某些命令由cmd.exe本身解释,包括cd命令。 cd命令将在“命令提示符”窗口中设置一些状态,这将影响同一cmd.exe处理将来命令的方式。 因此,不仅不能将cd作为程序运行,还不能运行cmd.exe并使用它来处理cd命令。 可以 ,但对您没有任何好处,因为cd命令仅会影响该cmd.exe进程中发生的事情,然后cmd.exe将终止。

您可能想看一下ProcessBuilder ,它具有一个方法directory来设置进程的工作目录。 (我对这个课程不是很熟悉,所以我不能给您任何具体的例子。但是看起来确实是您所需要的。)

编辑:在进一步研究之后:您正在使用Runtimeexec方法。 exec方法的版本采用工作目录作为参数:

public Process exec(String command,
                    String[] envp,
                    File dir)

因此,如果您将此参数与null用于envp (假设您不想创建一组新的环境变量),并且将File设置为引用工作目录,那么我认为这将为您提供所需的信息。 因此,您可以使用这种方式执行操作,而不是使用ProcessBuilder

更多:对于类似的命令

java zzzzzz < C:\iptest\input.txt > C:\outtest\name.txt

在“命令提示符”窗口中键入此命令时, cmd.exe程序将解释<>命令以重定向输入和输出,并执行必要的操作。 它们将无法在exec()执行的命令中工作,因为它们只会被视为命令行参数。 Runtimeexec方法没有用于设置重定向的输入和输出文件的机制,但是ProcessBuilder具有。 参见javadoc 我没有使用ProcessBuilder丰富经验,但是看起来您需要创建一个ProcessBuilder对象,使用command来设置命令和参数(作为单独的字符串,而不是带有空格字符的长字符串),使用directory来设置在工作目录中,使用redirectInputredirectOutput设置要重定向的文件,然后使用start()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM