【问题标题】:Does creation of new File(filename) object associate a process file descriptor with the object?新文件(文件名)对象的创建是否将进程文件描述符与对象相关联?
【发布时间】:2011-06-29 04:02:42
【问题描述】:

执行以下语句:

新文件(文件名);

将进程文件描述符与文件对象相关联?尝试搜索相同但没有任何成功。

理想情况下,它不应该将文件描述符与 File 对象静态关联。每当执行函数调用时,文件描述符应在函数调用执行期间与文件对象相关联。

任何帮助表示赞赏。

【问题讨论】:

    标签: java file operating-system


    【解决方案1】:

    没有文件描述符,因为new File(filename) 没有打开文件。它只是一个易于操作的路径名表示。

    文件描述符是指打开的文件。文件未打开这一事实并没有明确documented,而是遵循最小意外原则,并没有列出打开文件失败对应的异常。

    【讨论】:

      【解决方案2】:

      不,new File(...) 只是一个代表文件名的对象,甚至没有检查是否存在具有此名称和/或路径的文件(或目录)。

      【讨论】:

        【解决方案3】:

        没有。您可以通过自己检查 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 对象可以表示不存在的文件,因此无法将描述符与其关联。

        【讨论】:

        • Pedantic 模式开启:normalizeprefixLength 可以打开文件。虽然拥有源代码是一项巨大的资产,但这种属性确实应该从 API 中推导出来。
        • 没错,但是通过查看源代码,您也可以研究这些方法 :) 我并不是说这个 sn-p 是某人查询的结尾。
        猜你喜欢
        • 2017-08-24
        • 1970-01-01
        • 2012-03-27
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-01
        相关资源
        最近更新 更多