我有一个包含许多图像的目录。每个图像的格式为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()?
答案 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,但没有意识到这存在:
答案 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;