Java裁剪文件夹中的所有图像

时间:2014-01-12 19:01:26

标签: java cmd imagemagick

使用java代码处理Java代码以使用java代码,processbuilder裁剪文件夹中的所有图像,这段代码正常工作但是,它只针对第一个文件,其他文件没有做...请帮助我!!谢谢!

这是我的代码:

import java.io.File;
import java.io.IOException;


public class test1 {

    /**
     * @param args
     */
    public static void main(String argv[]) throws IOException, InterruptedException {
        // TODO Auto-generated method stub

        try {
            File folder = new File("Map_Image");
            File[] BFFile = folder.listFiles();

            String full_path = null;
            String new_path = null;

             for (File file : BFFile) {

                 String str = file.getName(); 
                 System.out.println("Image File:- " + str);


                 full_path = file.getAbsolutePath();


                 new_path = folder + "\\" + "new_" + str;
                 System.out.println("New Image Files:- " + new_path);

             try {
                 ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "C:\\Program Files\\ImageMagick-6.8.8-Q16\\convert.exe", "-crop", "512x512+0-20", full_path, new_path);
                 Process p = pb.start();
                 p.waitFor();
             } catch(Exception error1) {
                error1.printStackTrace();
             }

             }

        } catch(Exception error) {
            error.printStackTrace();
        }

    }

}

编码它工作但是,它只对第一个文件做,而不是为其他文件做.. 输出:

Image File:- address_map.jpg
New Image Files:- Map_Image\new_address_map.jpg
Image File:- Michael Couse_200857860.jpg
New Image Files:- Map_Image\new_Michael Couse_200857860.jpg

ProcessBuilder只运行一次,它没有为其他文件运行.. 请帮我!! 谢谢高级!!

1 个答案:

答案 0 :(得分:0)

不幸的是,listFiles非常错误(特别是对于unicode名称)。您可以使用的是:

try (DirectoryStream ds = Files.newDirectoryStream(folder)) 
{
    for (Path file : ds) {
    // Your code goes here
    }
} 
catch (IOException e) {
e.printStackTrace();
}

这并不是说它肯定会解决你的问题,但值得一试。