Java - 按顺序查找下一个文件

时间:2012-09-30 18:31:05

标签: java android

我有一个包含许多图像的目录。每个图像的格式为image-xxx.png,其中xxx是随机整数(介于0和1百万之间)。并非所有数字都被采用,因此例如可以使用image-1.png,然后是image-27.png等(它们不是0填充)。假设我的目录中有以下文件:

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

如何找到27(1511)之后的下一个整数,而不循环遍历28到1511之间的每个可能的整数并检查file.exists()?

5 个答案:

答案 0 :(得分: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());  
 }

这将返回给定目录中的所有文件和目录。在循环内部,您可以检查扩展名和文件名,看它是否与图像的命名约定匹配。

答案 1 :(得分:0)

您需要做的第一件事就是列出目录中的所有文件。

File[] files = directory.listFiles();

然后你需要根据他们的名字,你的实现在下面的一些自定义比较来订购文件。此时,您可以根据规则“按顺序”处理文件,而不必增加索引。

答案 2 :(得分: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;
    }
});

这将允许您按数字顺序迭代文件(而不是自然字符串排序)。

答案 3 :(得分:0)

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

File#listFiles(java.io.FilenameFilter)

答案 4 :(得分: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;