下面的代码对从目录中读取的文件数组进行排序。唯一的问题是如果文件夹是空的,那么我得到一个空指针异常。我已经尝试了几种不同的方法,首先检查文件夹是否为空,然后执行下面的代码,但是他们都使用if语句使这段代码超出范围。有没有办法可以检查目录是否为空以及是否跳过此代码?
//sort array listOfFiles by time (oldest to newest)
File folder = new File(dbBackupLocation + "/" + dbHost);
File[] listOfFiles = folder.listFiles();
Arrays.sort(listOfFiles, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
}
});
编辑:第Arrays.sort(listOfFiles, new Comparator<File>() {
行
我使用了Elliott Frisch代码:
File folder = new File(dbBackupLocation + "/" + dbHost);
File[] listOfFiles = folder.listFiles();
if (listOfFiles != null && listOfFiles.length > 0) {
// The array isn't empty.
Arrays.sort(listOfFiles, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified())
.compareTo(f2.lastModified());
}
});
}
但是当我尝试使用listOfFiles时:for(File s : listOfFiles) { i++; }
我显然是在取消引用它?
答案 0 :(得分:3)
如果我理解你,你需要像
这样的东西File folder = new File(dbBackupLocation + "/" + dbHost);
File[] listOfFiles = folder.listFiles();
if (listOfFiles != null && listOfFiles.length > 0) {
// The array isn't empty.
Arrays.sort(listOfFiles, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified())
.compareTo(f2.lastModified());
}
});
}
答案 1 :(得分:0)
通过命令检查文件夹大小:
Runtime.getRuntime().exec("/bin/bash -c du /path/to/Michaels/folder");
'du'linux命令用于查找目录的大小。
如果您有任何疑问,请与我们联系!
答案 2 :(得分:0)
检查文件夹是否存在以及文件夹是否存在。然后检查listOfFiles的大小:
File folder = new File(dbBackupLocation + "/" + dbHost);
if (folder != null && folder.exists() && folder.isDirectory()) {
File[] listOfFiles = folder.listFiles();
if (listOfFiles != null && listOfFiles.length > 0) {
Arrays.sort(listOfFiles, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
}
});
}
//display the files
for (File f : listOfFiles) {
System.out.println(f);
}
}