有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java RAF如果文件被重命名怎么办

如果我针对一个文件创建一个java随机访问文件对象。重命名文件时会发生什么情况

案例1。比方说,我针对测试创建了一个RAF对象。日志然后我重新命名了测试。日志->;测试1。通过以下操作登录

mv test.log test1.log

在这种情况下,我的RAF目标会发生什么

案例2。同样,根据测试创建一个RAF对象。然后记录:

mv test.log test1.log
touch test.log

在本例中,我的对象指向test。日志或测试1。日志

案例3。如果我的RAF对象指向最终将被旋转的日志文件,该怎么办

最重要的是,有人能向我解释一下封面下发生了什么吗?与RAF对象指向/引用实际文件的方式类似,它在重命名或删除文件时如何工作


共 (2) 个答案

  1. # 1 楼答案

    我做了一个小测试:

    • 创建了一个随机访问文件,并弹出了一个任务窗格
    • 对话框打开时,我删除了完全允许的文件
    • 然后试着在文件上写,然后关闭了它,这一切都悄无声息地发生了

    至少在我的linux机器上,它的行为是这样的

    当我尝试移动文件时,内容被成功写入

    对于案例2,内容将被写入您所指向的“test1.log”

    对于3d情况,不,文件最终不会旋转

    抱歉之前的猜测

  2. # 2 楼答案

    ============================================================

    我自己的测试

    ============================================================

        RandomAccessFile rand = new RandomAccessFile("/tmp/test_log", "rw"); 
        System.out.print("file created"); //======lineA======
        while (true) {
            Thread.sleep(8000);
            System.out.print("finish sleeping");
            int i = (int) rand.length(); //=====lineB=====
            rand.seek(0); // Seek to start point of file
            for (int ct = 0; ct < i; ct++) {
                byte b = rand.readByte(); // read byte from the file
                System.out.print((char) b); // convert byte into char
            }
        }
    

    测试用例1:

    在lineA之后在lineB之前删除test_日志文件,它会在没有任何问题/异常的情况下完成整个文件的读取

    测试用例2:

    mv/tmp/测试日志/tmp/测试日志。在lineA之后,在lineB之前,它再次完成整个文件的读取,没有任何问题/异常

    测试用例3:

    在测试用例2之后,开始向/tmp/test_log写入额外的行。bk

    echo "test line1 bla bla" >> /tmp/test_log.bk
    echo "test line2 bla bla" >> /tmp/test_log.bk
    

    它现在读取整个文件,并且读取test_log中添加的新行。bk也是