2016-01-26 2 views
1

Я новичок в Maven и Java, я импортировал Maven проект, он config.properties файл, этот файл содержитЧтение из файла config.properties Maven проекта

PATH_TO_QUERY_FILE=abc.txt 

и класс, используя свойство из config.properties, как

queryFile = prop.getProperty("PATH_TO_QUERY_FILE"); 

Должен ли я добавить реальный путь для этого файла в config, чтобы код читал его во время работы? подобные

PATH_TO_QUERY_FILE=/home/user/workspace/project/abc.txt 

или нет?

  • когда я mvn package проект я не нашел эти файлы в файл фляги, который создается, Является ли это из-за реального пути, что я спрашиваю о или нет?

enter image description here

Coder использовал эти заявления

FileInputStream finputstream = new FileInputStream( "/home/user/workspace/project/config.properties"); prop.load(finputstream); queryFile = prop.getProperty("PATH_TO_QUERY_FILE"); fos = new FileOutputStream(new File( prop.getProperty("PATH_TO_OUTPUT_FILE"))); finputstream.close();

+0

Вы должны добавить часть фрагмента maven, если хотите получить помощь – Wins

+0

извините, какая часть? – user5520049

+0

Является ли ваш файл в каталоге src \ main \ resources вашего проекта? Файлы в этом каталоге будут включены в банку. –

ответ

5

Это зависит от того, как вы собираетесь распространять свои приложения. И о том, как вы читаете файлы. В основном есть два варианта: чтение из файлов и чтение из classpath.

1. Чтение из файлов.

Если вы используете этот путь, передав его в конструктор File или передав некоторый FileStream, вы должны знать, что ваши пути будут разрешены относительно рабочей папки. Рабочая папка в основном та, из которой вы начинаете команду java -cp .. some.MainClass. В этом случае вам придется скопировать файл config.properties с собой и выполнить команду из соответствующего каталога. Файловые конфиги более гибки в том, что вам не придется перестраивать ваше приложение (или переупаковать вручную), если вы захотите изменить некоторые значения в этом конфиге. Если вы не планируете менять значения после распространения, как правило, лучше упаковать их в банки и прочитать как ресурс.

2. Чтение из ресурсов.

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

InputStream s = AnyClass.class.getClassLoader().getResourceAsStream("/config.properties"); 
//or shortcut version 
InputStream s = AnyClass.class.getResourceAsStream("/config.properties"); 

//now can use this input stream as usually, i.e. to load as properties 
Properties props = new Properties(); 
props.load(inputStream); 

Теперь для вашего вопроса, как правильно использовать этот ресурс с помощью maven. По умолчанию maven упаковывает все файлы в <MODULE_DIR>/src/main/resources в полученную банку. Так что все, что вам нужно, это разместить abc.txt в <MODULE_DIR>/src/main/resources/whatever/abc.txt и загрузить его как ...getResourceAsStream("/whaterver/abc.txt"). Это будет работать независимо от того, как вы используете свое приложение: из IDE или после упаковки. Чем это сработает, что бы вы ни делали.

+0

спасибо за отличную иллюстрацию, я отредактировал сообщение с кодом, которое использовал его кодер – user5520049

Смежные вопросы