Невозможно создать файл, если существует папка с таким именем

Следующий код показывает проблему, с которой я столкнулся:

// Assume working directory is empty.

File foo = new File("asdf");
foo.createNewFile(); // returns true, creates file "asdf" in working directory.

File bar = new File("asdf");
bar.mkdir(); // returns false

Когда я пытаюсь создать каталог с тем же именем, что и у уже существующего файла, функция «mkdir()» возвращает false. Аналогичная проблема возникает, когда операции выполняются в обратном порядке; когда каталог создается первым, функция createNewFile() возвращает false.

Я понимаю, что когда второй объект «Файл» инициализируется, он «находит» файл, созданный в предыдущей строке, поэтому «bar.exists() && bar.isFile()» истинно.

Пожалуйста, кто-нибудь может подробно рассказать, как я могу создать файл с тем же именем, что и у существующей папки, и наоборот.

Спасибо, Харри


person Harri Banerjee    schedule 19.04.2012    source источник
comment
Вероятно, вам следует использовать то же имя переменной в вашем примере.   -  person talnicolas    schedule 19.04.2012


Ответы (4)


Это невозможно, так как ваша операционная система (файловая система) этого не позволяет. Не проблема Java как таковая.

person maksimov    schedule 19.04.2012
comment
Спасибо, я предполагал, что это может быть проблемой, даже не пытаясь это сделать в терминале. - person Harri Banerjee; 19.04.2012

Вы не можете создать файл и папку с одинаковым именем и в одной папке. ОС не позволит вам сделать это, поскольку имя является идентификатором для этого объекта файла/папки.

Предположим, что это возможно, и у нас будет что-то вроде этого:

foo (folder)
|- bar (folder)
|- bar (file)

Как бы вы решили, какой из них открыть, когда вы получите команду «открыть foo/bar»? Если вы не можете решить только с этой информацией, то как ОС должна решить за вас?

person Thomas    schedule 19.04.2012

Это невозможно, так как ваша операционная система этого не позволяет. Вы всегда можете попробовать, и если это не удастся, переименуйте папку (или файл):

File bar = new File("asdf");
if(!bar.mkdir()) {
    // rename your folder or file
    bar.mkdir();
}
person talnicolas    schedule 19.04.2012

// Assume working directory is empty.

File foo = new File("asdf.txt");
foo.createNewFile(); // returns true, creates file "asdf" in working directory.

File bar = new File("asdf");
bar.mkdir(); // returns false

Приведенный выше код должен работать для вас. Всякий раз, когда вы создаете файл, давайте некоторое расширение, чтобы можно было различить файл и каталог.

person ashish shah    schedule 19.02.2015