Java 随机存取文件悬挂指针
我正在使用对象RandomAccessFile访问具有Java 随机存取文件悬挂指针,java,randomaccessfile,Java,Randomaccessfile,我正在使用对象RandomAccessFile访问具有 RandomAccessFile file = new RandomAccessFile(path, "r"); 我的问题是,当我执行某个操作时,文件路径是否从磁盘中删除 file.seek(...); 或者 没有异常开始,我没有任何异常 如果该文件已从磁盘中删除,指针悬空时是否可能出现异常 是否有其他方法检测文件不可访问性?您的问题有两个答案 基于,如果由于任何原因无法读取任何字节,则应获得一个IOException 如果由于文
RandomAccessFile file = new RandomAccessFile(path, "r");
我的问题是,当我执行某个操作时,文件路径是否从磁盘中删除
file.seek(...);
或者
没有异常开始,我没有任何异常
如果该文件已从磁盘中删除,指针悬空时是否可能出现异常
是否有其他方法检测文件不可访问性?您的问题有两个答案
- 基于,如果由于任何原因无法读取任何字节,则应获得一个
IOException
- 您可以使用中描述的方法在尝试读取之前显式检查文件删除
- 你打开一个文件
- 您或其他人删除该文件
- 您仍然可以访问该文件,在删除之前读取其中包含的内容,或者对其进行写入
- 没有更多的目录条目指向它
- 没有文件描述符使其保持打开状态
- 忽略对目录和文件系统的修改;你有一个文件,你使用它,句号。在许多用例中,这是正确的
- 在文档中声明该目录是您的,其他人不应删除其中的文件。毕竟,你无法阻止管理员破坏其系统或杀死你的应用程序
- 您的指针没有悬空,但仍然指向真实文件(即使其他人看不到)
- 如果文件不可访问(磁盘或连接的物理损坏、文件系统错误等),将引发异常。但是,如果只删除了条目,则仍然可以访问该文件
IOException
。(这是假设您正在尝试读取内存中未缓冲的字节)。@merlin2011您的解释符合逻辑,但不正确。“详细情况见我的回答。”谢尔盖·巴列斯塔,我被纠正了。我将把这个答案留给子孙后代,因为我认为这是一个很常见的误解。在Java环境中,所有这些都适用于*nix,因为对于Windows,Java中没有标准的方法来设置正在创建/打开的文件的FILE\u SHARE\u DELETE
,所以它们永远不能正常删除。感谢Serge Ballesta和Merlin2011的帮助。最后一个问题:我检查file.readLine()==null,如果是,我关闭并重新打开该文件。这是正确的过程吗?否,因为文件已被删除(条目已删除)这一事实与您自己的访问无关。@Serge Ballesta check file.readLine()==null在linux中似乎可以识别已删除的文件(以前打开过)
file.readLine()
File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) { /* do something */ }