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 之间的每个可能整数并检查 file.exists() 的情况下找到 27 (1511) 之后的下一个整数?

4

5 回答 5

0

Luiggi Mendoza 的评论实际上帮助最大。我知道 listFiles 但没有意识到这存在:

文件#listFiles(java.io.FilenameFilter)

于 2012-09-30T19:09:48.310 回答
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

您可以将文件列表添加到 中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 回答