Как изменить 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();

Итак, мои вопросы:

  1. (это может быть глупо) Где мы должны обычно помещать текстовый файл?
  2. Как я могу изменить [System.getProperty("user.dir");], так это будет указывать на мою рабочую область проекта?

Спасибо!

Sharon


относительно вашего ответа:

добавьте следующие аргументы -Duser.home='Ваш путь', убедитесь, что вы добавили -D в начале вашей системной переменной. И эту переменную вы можете поместить в поле "Аргументы виртуальной машины" на вкладке "Аргументы" при открытии конфигурации запуска при использовании сервера tomcat.

Я не могу найти место, о котором ты говоришь. Это в каталоге Eclipse или Tomcat?

Спасибо

5 ответов

Пытаться File myFile = new File(workDir, file);

Короткий ответ: вы не можете изменить текущий рабочий каталог запущенного приложения на 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.

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

Другие вопросы по тегам