实用方法 - 传递文件或字符串?

Jam*_* P. 11 java utility-method

这是一个实用方法的例子:

public static Long getFileSize(String fileString) {

    File file = new File(fileString);

    if (file == null || !file.isFile())
        return null;

    return file.length();
}
Run Code Online (Sandbox Code Playgroud)

将String而不是File传递给这样的方法是一种好习惯吗?一般来说,在制作这种风格的实用方法时应该采用什么推理?

Ste*_*n C 3

这是我的首选解决方案:

public static Long getFileSize(String path) {
    return getFileSize(new File(path));
}

public static Long getFileSize(File file) {
    return (!file.isFile()) ? -1L : file.length();
}
Run Code Online (Sandbox Code Playgroud)

请注意,它返回 -1L 而不是 0L,以允许调用者区分空文件和由于某种原因无法确定长度的“文件”。file.length()在某些情况下,如果您没有零长度文件,则将返回零;例如

  • file不存在时
  • 当 是file目录时
  • 当它file是一个特殊文件(例如设备文件、管道等)并且操作系统无法确定其长度时。

这次电话会议file.isFile()涉及这些案件。然而,方法是否应该返回-1L或抛出异常是有争议的。这场争论的答案在于这些-1L案例是“正常”还是“例外”,而这只能根据该方法设计使用的上下文来确定,