Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование Property из архива после запуска jar 
V
    Опции темы
jhane
Дата 30.4.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 13.8.2006
Где: Иерусалим

Репутация: нет
Всего: нет



При запуске приложения через jar, main class не видит те файлы Property которые он должен поднять (т.е. проверка if (propertiesFile.exists()) проваливается). В самом архиве они находятся, я проверяла.
Если запустить тоже приложение java mainClass из терминала, все бежит нормально.
Архив создан средствами Eclipse.

PM MAIL ICQ   Вверх
powerOn
Дата 30.4.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



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

Код

        try
        {
            Properties p = new Properties();
            p.load(ClassLoader.getSystemResourceAsStream("newpackage/newproperties.properties"));
            System.out.println(p.getProperty("test"));
        } 
        catch (IOException ex)
        {
            ex.printStackTrace();
        }



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
jhane
Дата 30.4.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 13.8.2006
Где: Иерусалим

Репутация: нет
Всего: нет



Код

public class LanguageElements {
public LanguageElements(String language){
    File propertiesFile = new File(language+ ".properties");
    if (propertiesFile.exists()){
        languageProperties = new Properties();
        languageProperties= PropertyFiles.loadProperties(language+ ".properties");
        PropertyFiles.printProperties(languageProperties, "languageProperties");
    }    
    else System.out.print("Language file not exist");
    
}
static Properties languageProperties;
}

PM MAIL ICQ   Вверх
powerOn
Дата 30.4.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



А что это за класс такой - PropertyFiles? Я его в стандартной библиотеке не нашел...

Вообще говоря, есть предположение, что файл property вы пытаетесь прочитать как обычный файл, но при работе с ресурсами упакованными в jar-файл это не прокатит. Нужно использовать способ приведенный мною выше.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
jhane
Дата 30.4.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 13.8.2006
Где: Иерусалим

Репутация: нет
Всего: нет



Цитата(powerOn @  30.4.2007,  19:31 Найти цитируемый пост)
А что это за класс такой - PropertyFiles? Я его в стандартной библиотеке не нашел...


Это мой класс. Было:
Код

static Properties loadProperties(String fileName) {

        InputStream propsFile;
        Properties tempProp = new Properties();

        try {
            propsFile = new FileInputStream(fileName);
            tempProp.load(propsFile);
            propsFile.close();
        } catch (IOException ioe) {
            System.out.println("I/O Exception.");
            ioe.printStackTrace();
            System.exit(0);
        }

        return tempProp;

    }


заменила на ваш код и убрала проверку существования файла
 
Код

 if (propertiesFile.exists())


результат тотже. не может открыть файл.

Добавлено через 7 минут и 22 секунды
А как тогда проверяют наличие файла (не обязательно property) в архиве? Не надеятся же всегда на его целостность.
PM MAIL ICQ   Вверх
powerOn
Дата 30.4.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(jhane @  30.4.2007,  21:46 Найти цитируемый пост)
результат тотже. не может открыть файл.


Вы загружаете файл используя FileInputStream, а так не нужно делать. Нужно через ClassLoader.getSystemResourceAsStream() файл грузить, тогда он из jar-а берется. Приведите пожалуйста получившийся код.

Цитата(jhane @  30.4.2007,  21:46 Найти цитируемый пост)
А как тогда проверяют наличие файла (не обязательно property) в архиве? Не надеятся же всегда на его целостность. 

Проверять не вернул ли ClassLoader.getSystemResourceAsStream() null.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
jhane
Дата 30.4.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 13.8.2006
Где: Иерусалим

Репутация: нет
Всего: нет



Код


public class LanguageElements {
public LanguageElements(String language){
        languageProperties = new Properties();
        languageProperties= PropertyFiles.loadProperties(language+ ".properties");
        PropertyFiles.printProperties(languageProperties, "languageProperties");
    
}
static Properties languageProperties;
}



Код

public class PropertyFiles {
.....

 static Properties loadProperties(String fileName) {
        Properties tempProp = new Properties();

        try {
         tempProp.load(ClassLoader.getSystemResourceAsStream(fileName));
        } catch (IOException ioe) {
            System.out.println("I/O Exception.");
            ioe.printStackTrace();
            System.exit(0);
        }

        return tempProp;

    }

PM MAIL ICQ   Вверх
powerOn
Дата 30.4.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



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


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
jhane
Дата 1.5.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 13.8.2006
Где: Иерусалим

Репутация: нет
Всего: нет



Я проверяла. Полный путь я нигде ни писала, только сокращенный, поэтому тут ошибки быть не может. Архив переименовала в зип и открыла. Все файлы на месте. Переименовала обратно и запустила главный класс из терминала, работает.
Единственное что приходит на ум, jar игнорирут classPath (согласно тому что я нарыла в нете), может в этом проблема? но тогда бы он не находил какую либо библиотеку а ни файл...
PM MAIL ICQ   Вверх
powerOn
Дата 1.5.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Вот структура jar файла:

user posted image

Вот код:
Код

package proptest;

import java.io.IOException;
import java.util.Properties;

public class Main
{
    public Main()
    {
    }
    
    public static void main(String[] args)
    {
        Properties p = new Properties();
        try
        {
            p.load(ClassLoader.getSystemResourceAsStream("proptest/pfile.properties"));
            System.out.println(p.getProperty("test"));
        }
        catch (IOException ex)
        {
            System.out.println(ex.toString());
        }
    }
}


Содержимое pfile.properties:
Цитата

# Sample ResourceBundle properties file
test=somevalue


Возьмите это за основу. jar прикреплен. (билд делал используя jdk1.6u1)




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
jhane
Дата 6.5.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 13.8.2006
Где: Иерусалим

Репутация: нет
Всего: нет



Скопировала твой пример. Тоже не поднимается.

Добавлено через 12 минут и 3 секунды
Сори, твой пример прошел. Теперь буду пытать свой. Спасибо

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  err.JPG 17,61 Kb
PM MAIL ICQ   Вверх
jhane
Дата 8.5.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 13.8.2006
Где: Иерусалим

Репутация: нет
Всего: нет



Ваш код работает если файл уже существут. Я поставила провеку как вы рекомендовали на null, но программа вылетает еще до проверки, на load.

Код

Properties p = new Properties();
      try
      {
          p.load(ClassLoader.getSystemResourceAsStream("Application.properties"));  
          if (p != null){
           myProp = PropertyFiles.loadProperties(PropertyFiles.PROPFILE);
          }
          else{
           myProp = PropertyFiles.createDefaultProperties();
          }
      }
      catch (IOException ex)
      {
          System.out.println(ex.toString());
      }

 
до этого тут я тоже проверяла с File.exists() . в апликации это работала, а в jar соответственно нет...


P.S.  как переписать 
Код
audiodata = new AudioStream (url.openStream()).getData();
 что-бы в jar поднималось?
PM MAIL ICQ   Вверх
powerOn
Дата 8.5.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(jhane @  8.5.2007,  16:20 Найти цитируемый пост)
Ваш код работает если файл уже существут.

Естественно если файл существует. А как же он может не существовать? Это же ресурс. Если его изначально нет, то зачем к нему обращаться? Здесь несколько другая идеология.

Цитата(jhane @  8.5.2007,  16:20 Найти цитируемый пост)
Я поставила провеку как вы рекомендовали на null, но программа вылетает еще до проверки, на load.


Я вам советовал другое:
Цитата(powerOn @  30.4.2007,  22:13 Найти цитируемый пост)
Проверять не вернул ли ClassLoader.getSystemResourceAsStream() null.

а вы проверяете:

Код

...
if (p != null){
...







--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
jhane
Дата 8.5.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 13.8.2006
Где: Иерусалим

Репутация: нет
Всего: нет



Цитата(powerOn @  8.5.2007,  16:14 Найти цитируемый пост)
Естественно если файл существует. А как же он может не существовать? Это же ресурс. Если его изначально нет, то зачем к нему обращаться? Здесь несколько другая идеология.


 smile обычно не делается проверка на дурака? Если кто-либо удалит ресурс, он создастся заново.
PM MAIL ICQ   Вверх
powerOn
Дата 8.5.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(jhane @  8.5.2007,  17:33 Найти цитируемый пост)
 smile обычно не делается проверка на дурака? Если кто-либо удалит ресурс, он создастся заново. 


smile Удалил его из jar-a? С таким же успехом можно удалить и класс-файлы, но вы же не будете делать проверку на их наличие. 
ИМХО, следует рассматривать ресурсы как внутрипрограммные данные, которые не подвергаются изменениям во время её выполнения. Если данные должны меняться и при этом сохраняться между запусками программы, то следует использовать внешние файлы.

Это сообщение отредактировал(а) powerOn - 8.5.2007, 16:40


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1426 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.