Безопасно ли перемещать файл во время записи в него? - PullRequest
1 голос
/ 21 января 2020

У меня есть BufferedWriter, который записывает некоторые данные в файл. В другом потоке файл может быть переименован с использованием метода nio Files.move:

    Path path = Paths.get( "name" );
    BufferedWriter writer = new BufferedWriter( new FileWriter( path.toFile() ) );
    writer.write( "some data\n" );
    new Thread( () -> {

      // do something

      Files.move( path, path.resolveSibling( "newName" ) );
    } ).start();

    // do something

    writer.write( "more data\n" );
    writer.close();

Я немного протестировал, и он всегда работал нормально, но мне может повезти, так что мой вопрос: это потокобезопасный вызов метода move, в то время как другой поток может записать в файл? Если нет, нужно ли синхронизировать операции перемещения и записи или есть более эффективный способ?

...