Путь создания файла Java FileOutputStream

Скажем, у меня есть код ниже:

String fileName = "name.txt";
FileOutputStream fileOut = new FileOutputStream(fileName);
wb.write(fileOut);

Таким образом, файл будет создан в папке bin проекта.

Однако, если я задаю имя файла в целом по пути:

String fileName = "c:/temp/name.txt";

этот файл будет создан в папке c:\temp.

Правильно? И почему это происходит, как работает FileOutputStream?

5 ответов

Это не о том, как работает FileOutputStream, это о пути, который операционная система присваивает процессу при его запуске

Этот путь называется текущий рабочий каталог. Из этого каталога вычисляются все relative paths. Простым именем файла является относительный путь (к текущему рабочему каталогу).

Если вы укажете absolute path, то этот путь используется для создания файла.

Подробнее о путях можно узнать на этой странице вики.


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


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

Если ваш текущий рабочий каталог является папкой bin в вашем проекте, он будет создан там.


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


Все об относительных и абсолютных каталогах. Скажем, что вы задаете путь foo/bar. Он создаст файл bar в каталоге foo вашей рабочей папки. То же самое относится к ../foo/bar, он создаст файл bar в каталоге foo в папке над рабочим каталогом. Однако, если вы наберете C:\\Documents\ and\ Settings\User\Desktop\bar (или /home/user/Desktop/bar), он создаст bar на рабочем столе. Для получения дополнительной информации смотрите здесь.

licensed under cc by-sa 3.0 with attribution.