2016-02-10 3 views
0

У меня есть СВОЙСТВА файл с путем к файлу в моем банкеЗагрузка файл из ресурса дает неправильный путь

logo.cgp=images/cgp-logo.jpg 

Этот файл уже существует:

enter image description here

Я хочу, чтобы загрузить этот файл в моем проекте, поэтому я делаю это:

String property = p.getProperty("logo.cgp"); //This returns "images/cgp-logo.jpg" 
File file = new File(getClass().getClassLoader().getResource(property).getFile()); 

Но тогда, когда я делаю file.exists() Я получаю false. Когда я проверяю file.getAbsolutePath(), это приводит к C:\\images\\cgp-logo.jpg

Что я делаю неправильно?

ответ

0

Вы можете использовать JarFile класс как это:

JarFile jar = new JarFile("foo.jar"); 
String file = "file.txt"; 
JarEntry entry = jar.getEntry(file); 
InputStream input = jar.getInputStream(entry); 
OutputStream output = new FileOutputStream(file); 
try { 
    byte[] buffer = new byte[input.available()]; 
    for (int i = 0; i != -1; i = input.read(buffer)) { 
     output.write(buffer, 0, i); 
    } 
} finally { 
    jar.close(); 
    input.close(); 
    output.close(); 
} 
2

Ну файл в банке просто не обычный файл. Это ресурс, который может быть загружен ClassLoader и считан как поток, но не файл.

Согласно Javadocs, getClass().getClassLoader().getResource(property) возвращает URL и getFile() на URL говорит:

Получает имя файла этого URL. Возвращенная часть файла будет такой же, как getPath(), плюс конкатенация значения getQuery(), если таковая имеется. Если нет части запроса, этот метод и getPath() возвращают идентичные результаты.

Так банку ресурса это то же самое, как getPath(), который возвращает:

путь часть этого URL, или пустая строка, если один не существует

Так вот вы возвращаетесь /images/cgp-logo.jpgотносительно пути к классу, который не соответствует реальному файлу в вашей файловой системе. Это также объясняет, возвращаемое значение file.getAbsolutePath()

правильный путь, чтобы получить доступ к ресурсу:

InputStream istream = getClass().getClassLoader().getResourceAsStream(property) 
Смежные вопросы