File.createNewFile() randomly fails

前端 未结 3 743
谎友^
谎友^ 2021-01-25 14:06

I\'ve build a simple test which creates and deletes a file (name does not change) in an infinite loop. The test does run for a couple of seconds (sometimes over 77,000 iteration

相关标签:
3条回答
  • 2021-01-25 14:18

    Try this:

    final File f = new File("file");
        while (true) {
            final boolean create = f.createNewFile();
            if (!create) {
                System.out.println("crate failed");
            } else {
                final boolean delete = f.delete();
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    System.out.println("...");
                }
                if (!delete) {
                    System.out.println("delete failed");
                }
            }
        }
    

    In this way we ensure that the file is released by the delete before invoking createNewFile.

    0 讨论(0)
  • 2021-01-25 14:25

    This issue reminds me a problem I experienced recently with the File.renameTo() method. It is (was?) due to this bug in the jvm :

    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6213298

    A weird workaround is to call System.gc() and to retry renaming the file again (and it works...).

    Not sure it has a link with your issue, but it may be worth exploring...

    0 讨论(0)
  • 2021-01-25 14:29

    I've found an explanation while writing the question. I still posted the question because I wanted to share what I learned.

    My application is not the only process on the system accessing files. The Windows Search Index Service for example could open this file because it wants to add it to it's index. Or the windows Explorer if it is updating the view.

    0 讨论(0)
提交回复
热议问题