gpt4 book ai didi

java - 在比较器中处理 IOException 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 18:48:44 25 4
gpt4 key购买 nike

我正在使用比较器按修改日期对文件进行排序。这些文件将针对包含的数据进行处理,然后删除。在处理文件之前,我必须确保文件按顺序排列。以下是我目前所拥有的。

public class FileComparator implements Comparator<Path> {  
@Override
public int compare(Path o1, Path o2) {
try {
return Files.getLastModifiedTime(o1).compareTo(Files.getLastModifiedTime(o2));
} catch (IOException exception) {
//write to error log
//***
}
}
}

*** 这就是我卡住的地方。我必须返回一个 int,因为比较需要它,但我不想返回零并且在它失败时具有错误的等效性。

我尝试重组代码,但如果 getLastModifiedTime() 失败,o1Modified 和 o2Modified 将为空。

public class FileComparator implements Comparator<Path> {  
@Override
public int compare(Path o1, Path o2) {
FileTime o1Modified = null;
FileTime o2Modified = null;
try {
o1Modified = Files.getLastModifiedTime(o1);
o2Modified = Files.getLastModifiedTime(o2);
} catch (IOException exception) {
//write to error log

}

return o1Modified.compareTo(o2Modified);

}
}

有没有标准的方法来处理这种情况?

最佳答案

我认为解决这种特殊情况的方法是在每个路径上恰好调用一次 Files.getLastModifiedTime(),存储结果,然后在排序期间使用存储的结果。

这有几个好处:

  1. 它干净利落地解决了IOException问题。

  2. 它不会重复和不必要地对相同的文件执行相同的代价高昂的 I/O 操作。

  3. 即使文件的最后修改时间在排序中途发生变化,它也能确保一致的排序(例如,请参阅 "Comparison method violates its general contract!" 了解这如何巧妙地破坏您的代码)。

关于java - 在比较器中处理 IOException 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41127982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com