我想在java程序中使用cmd命令,
想要破坏文件夹中的所有图片,我下载了ImageMagick,并使用cmd命令工作1图像,
cd C:\Users\Robert\Java-workspace\Crop_test\Crop_test1
cd convert -crop 312x312+0-10 image1.jpg new_image1.jpg
但是,我想在Java中使用它,所以,我可以通过程序裁剪文件夹中的所有图像,这是我的java程序:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.omg.CORBA.portable.OutputStream;
public class test1 {
public static void main(String argv[]) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "C:\\Users\\Robert\\Java-workspace\\Crop_test\\Crop_test1\\", "convert -crop 312x312+0-10 image1.jpg new_image1.jpg");
Process p = pb.start();
p.waitFor();
}
}
答案 0 :(得分:2)
虽然您正在询问如何使用CMD并且这已在其他答案中得到解决,但我认为最佳解决方案(考虑您对实现的解释)将是使用ImageMagick Java包装器,您可以看到here
干杯
答案 1 :(得分:0)
您可以在Java中调用CMD命令,如下所示;
Runtime.getRuntime().exec(your_command);
您要做的最好的事情是使用您需要运行的命令创建批处理文件,然后使用以下命令调用批处理文件;
Runtime.getRuntime().exec("cmd /C start D:\\test.bat");
因为您无法使用Runtime类执行任何更改目录命令。如果您遇到任何其他问题,请尝试此选项并告诉我。
答案 2 :(得分:0)
要尝试的几件事情(两者都是未经测试的):
在命令行中放置cd
并使用&&
在一行中运行这两个命令。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.omg.CORBA.portable.OutputStream;
public class test1 {
public static void main(String argv[]) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "cd C:\\Users\\Robert\\Java-workspace\\Crop_test\\Crop_test1\\ && convert -crop 312x312+0-10 image1.jpg new_image1.jpg");
pb.redirectErrorStream(true);
Process p = pb.start();
p.waitFor();
}
}
更改ProcessBuilder
开始的目录:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.omg.CORBA.portable.OutputStream;
public class test1 {
public static void main(String argv[]) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "convert -crop 312x312+0-10 image1.jpg new_image1.jpg");
pb.directory(new File("C:\\Users\\Robert\\Java-workspace\\Crop_test\\Crop_test1\\"));
pb.redirectErrorStream(true);
Process p = pb.start();
p.waitFor();
}
}
顺便说一句,您确定要导入org.omg.CORBA.portable.OutputStream
吗?你的意思是java.io.OutputStream
吗?
编辑:如果事情仍然无效,那么下一步就是查看问题是否找不到convert
。让我们自己运行convert
而不需要任何参数,看看它是否将其使用消息吐出到标准输出。运行以下命令:
public class test1 {
public static void main(String argv[]) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "convert");
pb.redirectErrorStream(true);
Process p = pb.start();
StreamGobbler g = new StreamGobbler(p.getInputStream(), "OUT");
g.start();
p.waitFor();
}
}
使用StreamGobbler class here。这会打印convert
的使用方法,每行以OUT>
为前缀吗?