Как изменить System.getProperty("user.dir") для рабочей области проекта
Я пытаюсь прочитать файл.txt построчно в моем коде, который я поместил прямо под /src/
директории, когда я запускаю ее с тестовым набором или со статическим void main, путь вывода правильный. Однако когда я запускаю приложение на сервере Tomcat, корневой путь приложения указывает туда, где я загружаю Eclipse - D:\eclipse\...
в то время как правильный путь должен быть D:\workspace\myproject\src\
, Тогда, конечно, он никогда не сможет найти файл.
Ниже мой код:
String workDir = System.getProperty("user.dir");
String file = "numFile.txt";
File myFile = new File(workDir + file);
String userPath = myFile.getPath();
Итак, мои вопросы:
- (это может быть глупо) Где мы должны обычно помещать текстовый файл?
- Как я могу изменить [
System.getProperty("user.dir");
], так это будет указывать на мою рабочую область проекта?
Спасибо!
Sharon
относительно вашего ответа:
добавьте следующие аргументы -Duser.home='Ваш путь', убедитесь, что вы добавили -D в начале вашей системной переменной. И эту переменную вы можете поместить в поле "Аргументы виртуальной машины" на вкладке "Аргументы" при открытии конфигурации запуска при использовании сервера tomcat.
Я не могу найти место, о котором ты говоришь. Это в каталоге Eclipse или Tomcat?
Спасибо
5 ответов
Короткий ответ: вы не можете изменить текущий рабочий каталог запущенного приложения на Java; см. Изменение текущего рабочего каталога в Java?
Настройка user.dir
свойство не будет работать, потому что это не влияет на текущий текущий каталог, который ОС использует при разрешении путей к приложению.
Настройка -Duser.dir
в командной строке тоже не будет работать. Скорее, вы должны:
- если вы запускаете с помощью скрипта,
cd
в соответствующий каталог перед запуском приложения, - если вы запускаете, используя
ProcessBuilder
установите рабочий каталог, используяdirectory(File)
метод или - если вы используете модуль запуска Eclipse, установите "Рабочий каталог" в конфигурации запуска.
Наконец, то, что вы пытаетесь сделать, - это (ИМО) плохая идея:
- Некоторые люди пишут файлы конфигурации Tomcat и webapp, предполагая, что текущим каталогом Tomcat является местоположение по умолчанию; например
$CATALINA_HOME/bin
, (Это неправильно... но ваш хак сломает это.) - Когда ваше приложение будет запущено в производство, вы не захотите возвращаться к какой-либо изолированной программной среде разработки.
Лучший подход - сделать что-то вроде ответа @Eng.Fouad.
ХОРОШО! Я понял!
Да,
File myFile = new File(workDir + "/" + file);
это путь и я редактирую аргумент tomcat в Eclipse IDE. (Выполнить -> Запустить конфигурацию... -> Apache Tomcat -> [Click] Tomcat vX Server -> на правом экране нажмите "Аргумент" -> раздел "Рабочий каталог" -> "Я перехожу на Другое" и указываю свой действительный рабочий каталог.)
Просто странно, что даже я запускаю tomcat Не с помощью IDE затмения, а с помощью DOS cmd и даже развертывания на сервере, он по-прежнему применяет рабочий каталог как D:\Eclipse. Но смена рабочего каталога работала в любом случае.
Для чтения файлов из корня пути к классам используйте (eclipse автоматически копирует любой файл, не являющийся Java, из src в классы):
this.getClass().getClassLoader().getResourceAsStream("filename.txt");
Так что вам не нужно связываться с текущей папкой.
Старайтесь не изменять системные свойства, вместо этого добавьте еще один параметр в системные свойства.
Например, добавить следующие аргументы -Duser.home='Your Path'
убедитесь, что вы добавляете -D
в начале вашей системной переменной. И эту переменную вы можете поместить в поле "Аргументы виртуальной машины" на вкладке "Аргументы" при открытии конфигурации запуска при использовании сервера tomcat.
И если вы выполняете то же самое из какого-то основного метода, то добавьте переменную в конфигурацию запуска, так как это сохранит святость в вашем коде.