我在Windows 8.1操作系统下工作。在里面我有一个名为 test.bat 的.bat文件,它只是执行一个echo命令:
echo "123" > output.txt
每当我从命令行(cmd.exe)运行文件时,它都会创建一个名为output.txt的文本文件,其中" 123"写入(我假设每次调用.bat时文件都不存在)。
每次从命令行调用它时,.bat运行正常,但是当我尝试从Java源代码调用它时,.bat不会执行,即使代码运行正常(或者似乎,因为没有显示警告或错误代码。)
我的Java源代码如下:
import java.io.*;
import java.util.*;
public class HelloWorld {
public static void main(String[] args) throws InterruptedException{
try
{
List<String> command_args = Arrays.asList("cmd.exe", null , " "test.
File dir = new File("C:\\Users\\Administrador\\workspace\\test\\src\\test");
String[] files = dir.list();
Runtime.getRuntime().exec("cmd /c test.bat", null, new File("C:\\Users\\Administrador\\workspace\\test\\src\\test"));
if( files.length == 0 )
{
System.out.println("Empty dir");
}
else
{
for( String f: files )
{
System.out.println(f);
}
}
ProcessBuilder pb = new ProcessBuilder( command_args );
pb.directory(dir);
Process proc = pb.start();
//int error = proc.waitFor();
}
catch( IOException ioe)
{
ioe.printStackTrace();
}
}
}
该文件名为 HelloWorld.java ,位于路径C:\ Users \ Administrador \ workspace \ test \ src \ test中。 代码的某些行用于列出变量dir引用的目录的内容,它确实指向正确的目录,因为代码的输出显示了目录中的文件(HelloWorld.java和test)。蝙蝠)。
如果我运行代码,它会正确打印目录内容,并且似乎执行100%的代码,但每次运行Java代码时都没有创建output.txt文件。我尝试了两种不同的方法从Java运行.bat,使用ProcessBuilder
并直接从Runtime运行,但是其中任何一个都没有得到预期的结果。
您是否知道是否可以从Java中完全运行这种.bat,或者我是否需要使用特定的库?
提前致谢。
答案 0 :(得分:0)
我展示的代码。工作得很好。
最重要的是你应该阅读inputStream,否则可能无法成功。
waitFor()使主进程运行,直到.bat工作完成。
echo helloworld >>f:/2.txt
exit
在f:/hello.bat
Process p;
String cmd="cmd /c start f:\\hello.bat";
try {
p = Runtime.getRuntime().exec(cmd);
InputStream in = p.getInputStream();
int c;
while ((c = in.read()) != -1) {
System.out.print(c);
}
in.close();
try {
p.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("done");
} catch (IOException e) {
System.out.println("play show error");
}