File.canWrite не работает в соответствии с ожиданиями - PullRequest
2 голосов
/ 21 марта 2012

Я пытаюсь проверить, доступен ли файл для записи или нет.Я изменил разрешение файла самостоятельно для всех пользователей.но если я попытаюсь запустить программу, она покажет «true» в качестве ответа.если я разрешаю разрешения, то он также показывает "true".

В чем моя проблема?

try
  {

     File file = new File("D:/myproject_log/delivery_report_edr.out"); 

        if(!file.canWrite())
        {
            System.out.println("you can't write!!!");
        }
        else
            System.out.println("you can write!!!");
  }
  catch(Exception e)
  {
      e.printStackTrace();
  }

Ответы [ 4 ]

2 голосов
/ 21 марта 2012

Работает нормально. Я скопировал твой код и запустил его дважды. Сначала я получил Вы можете написать , затем щелкните правой кнопкой мыши папку с файлами, перейдите в свойства и выберите только для чтения и снова запустите программу, и я получил вы не можете писать

Так что согласно документации метода canWrite () он дал мне ожидаемый результат. Пожалуйста, подтвердите ваши настройки еще раз и проверьте.

1 голос
/ 02 января 2014

Вы пытались использовать метод java.nio.file.Files # isWritable .а также Файл # canWrite?

0 голосов
/ 04 июня 2014

У меня была такая же проблема с файлом, расположенным в папке c: \ programFiles \, а метод File.canWrite вернул значение true, и я получал то же исключение. Когда я изменил разрешение на запись как допустимое значение true для ПОЛЬЗОВАТЕЛЯ, определенного на вкладке «Безопасность» в свойствах папки, это не дало мне никакого исключения.

0 голосов
/ 10 августа 2012

Я также обнаружил, что File.canWrite() нельзя доверять, особенно по сетевым дискам, часто возвращая true даже при сбое записи файла или наоборот.Я сделал свой собственный метод, который на самом деле пытается записать фиктивный файл в каталог.Это просто написать и надежно.Возможно они исправили это все же.

...