这是实用方法的示例:
public static Long getFileSize(String fileString) {
File file = new File(fileString);
if (file == null || !file.isFile())
return null;
return file.length();
}
将字符串而不是文件传递给这样的方法是一种好习惯吗?一般来说,在制作这种风格的实用方法时应该应用什么推理?
这是我的首选解决方案:
public static Long getFileSize(String path) {
return getFileSize(new File(path));
}
public static Long getFileSize(File file) {
return (!file.isFile()) ? -1L : file.length();
}
请注意,它返回 -1L 而不是 0L,以允许调用者区分空文件和由于某种原因无法确定长度的"file"。 file.length()
在您没有零长度文件的某些情况下将返回零;例如
- 当
文件
不存在时
- 当
文件
是目录时
- 当
文件
是一个特殊文件(例如设备文件、管道等)并且操作系统无法确定其长度时。
file.isFile()
调用处理这些情况。但是,方法是否应该返回 -1L
或抛出异常是值得商榷的。这场辩论的答案取决于 -1L
案例是“正常”还是“异常”,而这只能引用设计使用该方法的上下文来确定,