mkdirs создает папку на рабочем столе, а не внутри папки проекта

#java

#java

Вопрос:

Предполагается, что эти две строки создают папку в папке проекта, но вместо этого она делает это на рабочем столе, я должен сказать, что это динамический веб-проект с сервлетами, fetch api на стороне javascript и все такое, это логин для школьного проекта:

 File folder = new File("media");
folder.mkdir();
  

Он создает папку на рабочем столе, и это не предполагается, поскольку я не передаю путь к рабочему столу, а затем я помещаю те же две строки в новый Java-проект, например, единственным кодом являются эти две строки, и он работает нормально, то есть он создает папку в проектепапка, так почему же она не работает над проектом входа в систему? любое предложение было бы неплохо

Ответ №1:

media Папка будет создана в любом месте, указанном в «текущем рабочем каталоге» (CWD). То, как определяется это местоположение при запуске вашей программы, зависит от того, как запускается ваша программа.

Вы можете распечатать, что это такое, с помощью этого кода:

 String userDirectory = System.getProperty("user.dir");
  

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

Всякий раз, когда вы указываете относительный путь, который включает в себя значение, подобное используемому здесь, которое вообще не имеет компонента path, полный системный путь всегда создается относительно CWD . На всякий случай вам лучше всегда указывать абсолютные пути вместо указания относительных путей и полагаться на значение CWD.

Вы можете выполнять вызовы стандартной библиотеки Java, чтобы получить различные хорошо известные местоположения путей в вашей системе для построения абсолютных путей. Например, System.getProperty("user.home") вы получите домашний каталог текущего пользователя. Вы также можете передавать абсолютные корневые пути в свою программу во время выполнения, что позволяет динамически указывать, где находятся ваши файлы данных.

Если вы хотите полагаться на значение CWD, то убедитесь, что вы понимаете, на что оно устанавливается, исходя из того, как запускается ваша программа. Например, в IntelliJ, и я ожидаю, что другие IDE, вы можете указать, каким должен быть CWD при запуске вашей программы, с помощью установленных вами параметров запуска / отладки.

Комментарии:

1. Для дальнейшего чтения я также могу порекомендовать официальную документацию .

2. К сожалению, я не могу использовать файл свойств по той же причине (я должен использовать абсолютный путь, иначе он не работает), я должен полагаться на CWD, поскольку мне нужно загрузить этот проект на heroku, поэтому я получу сообщение об ошибке, если я использую абсолютные пути. Я не уверен, что вы подразумеваете под «как запускается ваша программа», я запускаю ее с помощью index.html , в противном случае он не будет запущен правильно (что означает, что я буду получать ошибки), другое дело, что у меня нет основного метода, я не уверен, имеет ли это какое-то отношение. Flaxel, я давно не вижу Java Api, в нем написано «недоступно по техническим причинам»

Ответ №2:

ну, в конце концов, я вроде как понял, что происходит, я создал новый класс с помощью метода main и напечатал эти две строки, запустил проект как java-приложение, и это сработало, так что, поскольку я запускал этот проект с помощью index.html это было не использование папки проектапуть, но я должен «Запустить на сервере» этот проект, иначе он просто не работает, теперь я поместил ярлык java, который был на рабочем столе, в папку проекта и выполнил его оттуда, и это сработало… Я просто нахожу это забавным, я не уверен в этом решении, я знаю, что для этого должно быть другое решение, как на самом деле? должен ли я переносить ярлык в папку проекта ?…