2016-04-27 10 views
-1

配列内のディレクトリからすべてのjpgイメージを返すようにしています。以下は私のコードです。配列内のディレクトリからすべてのjpgイメージを返します。

package component; 

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 

public class Main { 

public static ArrayList<String> getAllImages(File directory, boolean descendIntoSubDirectories) throws IOException { 
    ArrayList<String> resultList = new ArrayList<String>(256); 
    File[] f = directory.listFiles(); 
    for (File file : f) { 
     if (file != null && file.getName().toLowerCase().endsWith(".jpg") && !file.getName().startsWith("tn_")) { 
      resultList.add(file.getCanonicalPath()); 
     } 
     if (descendIntoSubDirectories && file.isDirectory()) { 
      ArrayList<String> tmp = getAllImages(file, true); 
      if (tmp != null) { 
       resultList.addAll(tmp); 
      } 
     } 
    } 
    if (resultList.size() > 0) 
     return resultList; 
    else 
     return null; 
} 


} 

このコードを実行しますが、残念ながらこのエラーメッセージが表示されます。私のコードに何が間違っているか分かりますか?事前に感謝します。

enter image description here

+0

はmaxheapを大きくしてみてください – sidgate

答えて

0

私はあなたがそれぞれの関数呼び出しのために同じリストを使うべきだと思います。ここでは、各関数呼び出しの新しいリストを作成します。また、サイズを指定せずにリストを初期化することもできます。

public static ArrayList<String> getAllImages(File directory, boolean descendIntoSubDirectories) throws IOException { 
    ArrayList<String> results = new ArrayList<>(); 

    getAllImagesHelper(directory, descendIntoSubDirectories, results); 

    return results; 
} 

public static void getAllImagesHelper(File directory, boolean descendIntoSubDirectories, ArrayList<String> results) throws IOException { 
    File[] f = directory.listFiles(); 
    for (File file : f) { 
     if (file != null && file.getName().toLowerCase().endsWith(".jpg") && !file.getName().startsWith("tn_")) { 
      results.add(file.getCanonicalPath()); 
     } 
     if (descendIntoSubDirectories && file.isDirectory()) { 
      getAllImagesHelper(file, true, results); 

     } 
    } 
} 
+0

コードは私のPCで動作しません:(何かエラーが発生しました – Belle

0

あなただけ(subDirectriesなし)ディレクトリからすべての.jpgファイルをしたい場合は、

Files.list(Paths.get("yourPath")).filter(path->Files.isRegularFile(path) && path.toString().endsWith(".jpg")).collect(Collectors.toList()); 

を次のコードを使用することができたり、サブディレクトリが必要な場合:

List<Path> paths = new ArrayList<>(); 
    Path start = Paths.get("yourPath"); 
    try { 
     Files.walkFileTree(start, new SimpleFileVisitor<Path>() { 
      @Override 
      public FileVisitResult visitFile(Path filePath, BasicFileAttributes attrs) throws IOException { 
       if (filePath.toString().endsWith(".jpg")) { 
        paths.add(filePath); 
       } 
       return FileVisitResult.CONTINUE; 
      } 
     }); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
関連する問題