Передавая.JAR-программу (запускается из терминала) текстовый файл в качестве ввода
Я создал Java-программу, которую другие тестировщики будут использовать, чтобы помочь с их тестированием. Я отправлю им zip-файл с файлами.jar, readme.txt и main.properties.txt.
Файл main.properties.txt представляет собой шаблон для тестировщиков для ввода своих учетных данных для доступа к БД. Они обновят файл main.properties своими кредитными базами данных, а затем попытаются запустить.jar из терминала или командной строки. Проблема, с которой я сталкиваюсь, заключается в следующем. Моей программе нужен этот обновленный файл main.properties.txt, чтобы она могла создавать соединения с нашими БД.
Какие инструкции мне нужно дать в моем файле readme, чтобы моя программа могла успешно найти файл main.properties.txt? Должны ли main.properties находиться в том же каталоге, что и.jar? Могут ли тестировщики просто создать файл на своем рабочем столе или в папке с документами для размещения файлов.jar и main.props?
Другой вопрос, который я имею, состоит в том, как передать этот файл моей программе, когда он запускается из терминала? В настоящее время это действительно легко, потому что main.props является частью моей программы, и я могу просто сделать что-то вроде
Properties prop = new Properties();
FileInputStream in = new FileInputStream("src/main/resources/main.properties");
prop.load(in);
in.close();
Но теперь main.properties больше не является частью проекта. Я не знаю, как изменить код выше, чтобы он мог найти текст из каталога на локальном. Местоположение, в которое они хотят поместить свои main.properties, находится вне моего контроля, поэтому написание статического пути не будет работать. Пожалуйста помоги!
1 ответ
Есть много способов, я покажу вам два.
Тебе необходимо File
объект, который указывает на файл main.properties. Затем вы создаете поток на этом объекте new FileInputStream(File)
, как вы уже сделали с помощью String
,
Проблема, конечно, заключается в том, чтобы получить относительный путь к main.properties.txt, который работает во всех системах, независимо от того, где jar
-Файл находится.
1. Рабочий стол
В этом случае файл main.properties.txt находится на рабочем столе пользователя. Вот как вы получаете к нему доступ:
File desktop = new File(System.getProperty("user.home"), "Desktop");
File target = new File(desktop, "main.properties.txt");
С другой стороны, если вы планируете распространять файлы конфигурации и свойств, которые не требуют взаимодействия с пользователем, вы можете использовать такие места, как Temp
или же Documents
(Windows).
2. По отношению к банке
Вероятно, один из ваших лучших вариантов. Предположим, что цель находится в той же папке, что и jar
-Файл (или, по крайней мере, в фиксированной структуре относительно jar
). Вот как вы получаете к нему доступ (связанный вопрос: как получить путь к файлу jar):
CodeSource codeSource = YourMainClass.class.getProtectionDomain().getCodeSource();
File jarFile = new File(codeSource.getLocation().toURI().getPath());
File jarDir = jarFile.getParentFile();
File target = new File(jarDir, "main.properties.txt");