2016-10-20 8 views
1

Я прочитал File класс javadoc. Вот что там написано:Создает ли новый экземпляр файла причину создания пустого файла?

Создает новый экземпляр файла, преобразуя заданную строку пути в абстрактный путь. Если заданная строка является пустой строкой, , то результатом будет пустой абстрактный путь.

ВОПРОС: Это гарантирует, что, если файл не существует, он не будет создавать пустой файл или это зависит от системы? Я попробовал его на RedHat linux, и пустой файл создается только после создания OutputStream.

Это не очевидно из java для меня.

+5

Экземпляр «Файл» - это всего лишь дескриптор самого файла. Пока вы не пишете в этот файл или не вызываете 'createNewFile()' и т. Д., На нем ничего не создается, если оно еще не существует. Кроме того, выдержка из JavaDoc, которую вы предоставили, ничего не говорит об этой теме, но относится только к именам путей. – Thomas

+1

Подумайте об объекте 'File' как о абстракции имени файла. Никаких действий в файловой системе не будет. – Henry

+1

«Файл» - это обертка для «String», которая предлагает некоторые методы проверки файлов, такие как 'File.exists()', которые бы очень сильно делали, если бы он всегда создавал файл. –

ответ

2

Да, это гарантирует, что файл не будет создан путем вызова new File(). Он будет создан, если вы вызовете createNewFile().

Узор может быть:

File f = new File(filePathString); 
if(f.exists() && !f.isDirectory()) { 
    // do something 
} else { 
    f.createNewFile(); 
} 
+2

Я согласен с методом createNewFile(). Но если вы * гарантируете * определенное поведение, вы можете захотеть добавить ссылку или источник обратно назад! – GhostCat

+1

Единственная «гарантия», которую я обнаружил, заключается в том, что конструкторы не выбрасывают IOException, исключение необходимо в случае проблем с доступом. Это немного светло, но это начало;) – AxelH

1

Когда вы смотрите на исходный код в конструкторе, вы видите, что создание нового экземпляра файла просто инициализирует некоторые внутренние переменные:

public File(String pathname) { 
    if (pathname == null) { 
     throw new NullPointerException(); 
    } 
    this.path = fs.normalize(pathname); 
    this.prefixLength = fs.prefixLength(this.path); 
} 

Так просто создание нового объекта File не приведет к созданию нового файла.

Смежные вопросы