使用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只运行一次,它没有为其他文件运行.. 请帮我!! 谢谢高级!!
答案 0 :(得分:0)
不幸的是,listFiles
非常错误(特别是对于unicode名称)。您可以使用的是:
try (DirectoryStream ds = Files.newDirectoryStream(folder))
{
for (Path file : ds) {
// Your code goes here
}
}
catch (IOException e) {
e.printStackTrace();
}
这并不是说它肯定会解决你的问题,但值得一试。