0

いくつかの画像を含むディレクトリがあります。各画像の形式はimage-xxx.pngです。ここで、xxxはランダムな整数(0から100万の間)です。すべての数字が取得されるわけではないため、たとえば、image-1.pngの後にimage-27.pngなどを付けることができます(0が埋め込まれていません)。ディレクトリに次のファイルがあるとします。

image-1.png
image-27.png
image-1511.png
image-125252.png

28から1511までの可能な各整数をループせずに、27(1511)の次の整数を見つけて、file.exists()かどうかを確認するにはどうすればよいですか?

4

5 に答える 5

0
 String TAG = "MyApp"
 File file = new File("/your_directory");  
 File[] files = file.listFiles();  
 for (int fileInList = 0; fileInList < files.length; fileInList++)  
 {  
     Log.i(TAG, files[fileInList].toString());  
 }

これにより、指定したディレクトリ内のすべてのファイルとディレクトリが返されます。ループ内で、拡張子とファイル名をチェックして、画像の命名規則と一致するかどうかを確認できます。

于 2012-09-30T18:34:32.083 に答える
0

最初に行う必要があるのは、ディレクトリ内のすべてのファイルを一覧表示することです。

File[] files = directory.listFiles();

次に、ファイルの名前のカスタム比較に基づいてファイルを注文する必要があります。以下の実装です。この時点で、ルールに基づいて「順番に」ファイルが作成され、インデックスをインクリメントする必要はありません。

于 2012-09-30T18:34:34.133 に答える
0

ファイルのリストがあると仮定すると、独自の並べ替え順序を定義できます。

// get a collection of the filenames in the directory
List<String> filenames = Arrays.asList(new File("/path/to/directory").list());

// sort this in custom order
Collections.sort(filenames, new Comparator<String>(){
    @Override
    public int compare(String left, String right){
        String[] leftParts = left.split("[\\-\\.]");
        String[] rightParts = right.split("[\\-\\.]");

        if(leftParts.length < 3 || rightParts.length < 3){
           // filename doesn't seem to match what we expect
           // default to standard ordering
           return left.compareTo(right);
        }

        int leftVal = -1
        int rightVal = -1;
        try {
            // convert appropriate segment to integers
            leftVal = Integer.valueOf(leftParts[1]);
            rightVal = Integer.valueOf(rightParts[1]);
        } catch(NumberFormatException e) {
            return left.compareTo(right);
        }

        return rightVal - leftVal;
    }
});

これにより、(自然な文字列の順序ではなく)番号順にファイルを反復処理できます。

于 2012-09-30T18:37:21.600 に答える
0

LuiggiMendozaのコメントが実際に最も役に立ちました。私はlistFilesについて知っていましたが、これが存在することに気づいていませんでした。

File#listFiles(java.io.FilenameFilter)

于 2012-09-30T19:09:48.310 に答える
0

ファイルのリストをに追加してから、このメソッドをArrayList使用してindexOf、指定したファイルのインデックスを取得できます。次に、1ずつ増やします。

File imagesDirectory = new File("C:\\");

String[] arrayFiles;

arrayFiles = imagesDirectory.list();

ArrayList<String> listOfFiles = new ArrayList<String>(Arrays.asList(arrayFiles));

int indexOfFile = listOfFiles.indexOf("image-27.jpg");
int nextIndex = indexOfFile + 1;
于 2012-09-30T19:29:03.000 に答える