2014-01-12 2 views
0

Работа с кодом Java для обрезки всех изображений в папке с помощью java-кода, processbuilder, Этот код работает, но он работает только для первого файла, другие файлы не работают. Пожалуйста, помогите мне !! Благодаря!!Java Crop all Images in Folder

Вот мой код:

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 только работает один раз , его не работает для других файлов .. Пожалуйста, помогите мне! Спасибо, Advanced!

+0

Вам нужно рекурсивное решение (* Я предполагаю, что эти другие файлы живут в подкаталогах?) – mre

+0

nope все файлы в одной папке не в подпапках .. Я не знаю, почему работает только для первого файла .. Пожалуйста, помогите мне спасибо! – user3187463

+0

Что возвращает 'p.waitFor();' возврат в первый раз? – PopoFibo

ответ

0

К сожалению, listFiles довольно глючный (особенно с именами юникода). Что вы можете использовать:

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

Это не значит, что это обязательно устранит вашу проблему, но стоит попробовать.

+0

Я пробовал, но, то же самое .. пожалуйста, помогите мне спасибо! – user3187463