【发布时间】:2014-10-27 06:17:17
【问题描述】:
我想要基于我的创建日期的文件列表。 当我更新任何图像并尝试检索所有图像时,顺序会随机更改。
这是我的代码,
File[] files = parentDir.listFiles();
for (File file : files) {
// I am getting files here
}
任何帮助..
【问题讨论】:
我想要基于我的创建日期的文件列表。 当我更新任何图像并尝试检索所有图像时,顺序会随机更改。
这是我的代码,
File[] files = parentDir.listFiles();
for (File file : files) {
// I am getting files here
}
任何帮助..
【问题讨论】:
List<File> fileList = new ArrayList<File>();
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File file1, File file2) {
long k = file1.lastModified() - file2.lastModified();
if(k > 0){
return 1;
}else if(k == 0){
return 0;
}else{
return -1;
}
}
});
【讨论】:
我想要基于我的创建日期的文件列表。
正如前面两个答案所指出的,您可以根据修改日期对文件进行排序:
file.lastModified()
但修改日期已更新,例如在重命名文件的瞬间。所以,这不能代表创建日期。
不幸的是,创建日期不可用,因此您需要重新考虑您的基本策略:
【讨论】:
这是根据修改日期对文件进行排序的代码,因为创建日期不可用。
File[] files = parentDir.listFiles();
Arrays.sort(files, new Comparator() {
public int compare(Object o1, Object o2) {
if (((File)o1).lastModified() > ((File)o2).lastModified()) {
return -1;
} else if (((File)o1).lastModified() < ((File)o2).lastModified()) {
return +1;
} else {
return 0;
}
}
});
【讨论】:
试试这个可能对你有帮助,
public static void main(String[] args) throws IOException {
File directory = new File(".");
// get just files, not directories
File[] files = directory.listFiles((FileFilter) FileFileFilter.FILE);
System.out.println("Default order");
displayFiles(files);
Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
System.out.println("\nLast Modified Ascending Order (LASTMODIFIED_COMPARATOR)");
displayFiles(files);
Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
System.out.println("\nLast Modified Descending Order (LASTMODIFIED_REVERSE)");
displayFiles(files);
}
public static void displayFiles(File[] files) {
for (File file : files) {
System.out.printf("File: %-20s Last Modified:" + new Date(file.lastModified()) + "\n", file.getName());
}
}
【讨论】:
LastModifiedFileComparator 在 Apache 的 Common IO 中可用。
在 Kotlin 语言中可以这样写:
private fun getListFiles(parentDir: File): MutableList<File> {
val inFiles: MutableList<File> = parentDir.listFiles().toMutableList()
inFiles.filter { it.extension == "jpg" }
inFiles.sortByDescending({ it.lastModified()})
return inFiles
}
【讨论】:
伙计们,如果您无法解决这个LastModifiedFileComparator 问题,这是我找到的解决方案。
第 1 步
打开应用级别build.gradle
并添加如下依赖项。获取更新版本点击here
implementation group: 'commons-io', name: 'commons-io', version: '2.0.1'
第 2 步
如果它不起作用,则添加 mavenCentral() 在您的应用级别创建新的 repositories build.gradle
repositories{
mavenCentral()
}
dependencies {
//all implementation
这一切都应该像魅力一样工作,如果不是,请参考这里
【讨论】:
1.将其添加到 build.gradle 中:
implementation group: 'commons-io', name: 'commons-io', version: '2.4'
2.在活动中添加代码:
File[] folderFiles = Files.listFiles();
// Sort files in ascending order base on last modification
Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
// Sort files in descending order base on last modification
Arrays.sort(folderFiles, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
【讨论】:
按日期对文件数组进行排序的一种快速而优雅的方式是:
Arrays.sort(fileList, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return Long.compare(f1.lastModified(), f2.lastModified());
// For descending
// return -Long.compare(f1.lastModified(), f2.lastModified());
}
});
要对文件数组进行排序,按名称是:
Arrays.sort(fileList, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return f1.compareTo(f2);
// For descending
// return -f1.compareTo(f2);
}
});
【讨论】: