#java #файлы
Пытаюсь создать новый файл по примеру из книги, но он не создается. Подобных примеров с использованием конструктора File f = new File("E://test.txt"); в интернете много, но почему-то у меня на JDK 8 оно не работает. public class Main { public static void main(String[] args) throws IOException{ File f = new File ("E://Workspace//create4.txt"); System.out.println("File name : "+ f.getName()); System.out.println("Parent: " + f.getParent()); System.out.println(f.exists() ? "exists" : "does not exist"); } } В итоге, вот, что получается: File name : create4.txt Parent: E:\Workspace does not exist Файла - нет. Знаю, что если набрать в try f.createNewFile(); то все будет ок, но раз приводят примеры без него, то значит должно работать.
Ответы
Ответ 1
Конструктор класса java.io.File создаёт объект, представляющий файл на диске. Но конструктор не создаёт этот файл, а предоставляет некоторый интерфейс, который затем позволяет что-либо сделать. Например, проверить существует ли файл. Проще говоря, объект класса File после создания представляет собой только имя файла, независимо от его физического существования на диске. Как верно замечено в вопросе, чтобы создать файл нужно вызвать метод createNewFile. Или же передавать объект типа File каким-либо функциям для дальнейшей работы. Но ещё раз повторю, что конструктор сам никаких новых файлов на диске не создаёт.Ответ 2
На мой взгляд, это недостаток наименования класса как File, поскольку по сути этот класс является абстрактным представлением пути к файлу или директории (из документации): An abstract representation of file and directory pathnames. Также добавлю цитату из книги "Thinking in Java" (4 издание, Bruce Eckel, в переводе): Название класса File обманчиво. Кажется, что он представляет файл, но на самом деле это не так. На самом деле, более правильным названием было бы FilePath — путь к файлу. Он представляет собой реально либо имя конкретного файла, либо имя группы файлов в каталоге. Если это группа файлов, вы можете получить их все, используя метод list( ), который возвращает массив строк. Возврат именно массива, а не одного из более удобных классов-контейнеров, имеет свой смысл: количество элементов фиксировано, а если вам нужен другой список файлов, вы просто создаёте другой объект типа File Если посмотреть исходный код конструктора, то он очень прост: public File(String pathname) { if (pathname == null) { throw new NullPointerException(); } this.path = fs.normalize(pathname); this.prefixLength = fs.prefixLength(this.path); } Как видим, никакого файла на диске не создается.
Комментариев нет:
Отправить комментарий