【发布时间】:2011-06-29 04:02:42
【问题描述】:
执行以下语句:
新文件(文件名);
将进程文件描述符与文件对象相关联?尝试搜索相同但没有任何成功。
理想情况下,它不应该将文件描述符与 File 对象静态关联。每当执行函数调用时,文件描述符应在函数调用执行期间与文件对象相关联。
任何帮助表示赞赏。
【问题讨论】:
标签: java file operating-system
执行以下语句:
新文件(文件名);
将进程文件描述符与文件对象相关联?尝试搜索相同但没有任何成功。
理想情况下,它不应该将文件描述符与 File 对象静态关联。每当执行函数调用时,文件描述符应在函数调用执行期间与文件对象相关联。
任何帮助表示赞赏。
【问题讨论】:
标签: java file operating-system
没有文件描述符,因为new File(filename) 没有打开文件。它只是一个易于操作的路径名表示。
文件描述符是指打开的文件。文件未打开这一事实并没有明确documented,而是遵循最小意外原则,并没有列出打开文件失败对应的异常。
【讨论】:
不,new File(...) 只是一个代表文件名的对象,甚至没有检查是否存在具有此名称和/或路径的文件(或目录)。
【讨论】:
没有。您可以通过自己检查 File 类的源代码来查看这一点,从 jdk 1.6.0_22 开始:
public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
this.path = fs.normalize(pathname);
this.prefixLength = fs.prefixLength(this.path);
}
由于您可以使用尚不存在的路径调用 File 构造函数,并且由于 File 对象可以表示不存在的文件,因此无法将描述符与其关联。
【讨论】:
normalize 或 prefixLength 可以打开文件。虽然拥有源代码是一项巨大的资产,但这种属性确实应该从 API 中推导出来。