我如何在Java程序中使用CMD Command?

时间:2014-01-12 14:33:24

标签: java cmd

我想在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();
    }
}

3 个答案:

答案 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)

要尝试的几件事情(两者都是未经测试的):

  1. 在命令行中放置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();
        }
    }
    
  2. 更改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();
        }
    }
    
  3. 顺便说一句,您确定要导入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>为前缀吗?