在Java中区分ESTALE和ENOENT的最佳方法
发布时间:2020-12-14 19:34:55 所属栏目:Java 来源:网络整理
导读:我正在尝试在NFS文件系统上编写在 Linux环境中运行的Java应用程序. 我注意到当我调用java.io.File.exists()时,它对ESTALE(Stale NFS文件句柄)和ENOENT(没有这样的文件或目录)都返回false.对于我的应用程序,我需要能够区分这两者. 目前我正在考虑使用JNA实现s
我正在尝试在NFS文件系统上编写在
Linux环境中运行的Java应用程序.
我注意到当我调用java.io.File.exists()时,它对ESTALE(Stale NFS文件句柄)和ENOENT(没有这样的文件或目录)都返回false.对于我的应用程序,我需要能够区分这两者. 目前我正在考虑使用JNA实现stat()调用,但这似乎有点矫枉过正,需要实现整个stat结构和所有__xstat64的东西,它们似乎与平台相关. 有一种简单的方法可以在像File.exists()这样的Java调用之后简单地获取底层的errno,或者解决这个问题的任何其他想法吗? 解决方法
使用JNA,您实际上不必实现stat结构;你只需要分配足够大的内存来代表原生结构.
然后,您可以调用Native.getLastError()来检索errno值. Pointer fake_stat = new Memory(2048); // big enough if (clib.stat(filename,fake_stat) != 0) { int errno = Native.getLastError(); ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |