2016-01-30 3 views
0

Я создал файл в пакете проекта, используя этот код:Абсолютный путь к файлу внутри пакета проекта

File xmlFile = new File("src/com/company/project/xml/tags.xml"); 

Я могу прочитать файл, убегая от затмения. Однако, после создания .jar, я не могу прочитать файл. Поэтому я хочу поставить абсолютный путь при чтении файла из пакета проекта. Как это можно сделать? Помощь и предложения приветствуются.

ответ

0

Try с getClass().getResource()

new File(getClass().getResource("src/com/company/project/xml/tags.xml").toURI());

+0

Предполагая, что это внедренный ресурс, в большинстве случаев вы не сможете для доступа к нему как к файлу, потому что его не будет. Вместо этого вы должны использовать 'Class # getResource' или' Class # getResourceAsStream' и использовать возвращаемый 'URL' /' InputStream' для его чтения. Вы также не должны включать 'src' в любое значение пути – MadProgrammer

+1

Хотя этот код может ответить на вопрос, было бы лучше включить какой-то контекст, объяснить, как он работает и когда его использовать. Ответы только на код не полезны в долгосрочной перспективе. – Bono

1

В большинстве случаев, IDE, не будет включать в себя не Java-файлы в результате Jar. Большинство IDE также будут включать каталог src в пути к классам при запуске/отладке программы из них.

Как правило, никогда не включайте src в любом пути, src просто не будет существовать, как только программа будет построена.

Вместо этого вам необходимо использовать Class#getResource или Class#getResourceAsStream, в зависимости от ваших потребностей. Вы должны помнить, что вы никогда не должны рассматривать «внедренный» ресурс как File, так как в большинстве случаев его не будет, это будет поток байтов в zip-файле.

Что-то вроде ...

URL xmlFile = getClass().getResource("/com/company/project/xml/tags.xml"); 

возвратит URL ссылку на ресурс. Помните, если вам нужен InputStream, вам нужно будет Class#getResourceAsStream.

Если вы хотите, ресурс будет доступен для записи, то вам необходимо будет найти другое место, чтобы сохранить его, так как встроенные ресурсы только для чтения

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