是否创建新的文件(文件名)对象将进程文件描述符与对象关联?
问题描述:
请问下面的说法:是否创建新的文件(文件名)对象将进程文件描述符与对象关联?
new File(filename);
将进程文件描述符与File对象关联?试图搜索相同但没有任何成功。
理想情况下,它不应该静态地将文件描述符与File对象相关联。每当执行函数调用时,文件描述符应该在函数调用执行的时间段内与文件对象关联。
任何帮助表示赞赏。
答
没有文件描述符,因为new File(filename)
不是打开该文件。这只是一个容易操作的路径名称表示。
文件描述符指的是打开的文件。文件没有被打开的事实并不明确documented,但是从最不惊讶的原则出发,并且没有列出与未能打开文件相对应的例外。
答
不,new 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对象可以表示不存在的文件,所以不可能将描述符与它关联。
迂回模式:无论是`normalize`还是`prefixLength` * *都可以打开文件。虽然拥有源代码是一笔巨大的资产,但这种属性应该真正从API推导出来。 – 2011-02-17 15:07:19