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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами Properties 
:(
    Опции темы
hvzh
Дата 14.11.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Следующая проблема: есть файл с настройками софта (читается с помощью Properties) в jar-файле. Планировалось использовать его как файл по умолчанию при отсутствии одноименного в рабочем каталоге. Столкнулся с тем, что при наличии файла в рабочем каталоге, данные все равно считываются из файла, который находится в jar
PM MAIL   Вверх
tux
Дата 14.11.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

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



Без кода могу только предположить, что properties читаются как ресурс, при этом jar есть в CLASS-PATH, а текущий каталог нет.
PM MAIL Skype GTalk Jabber YIM   Вверх
hvzh
Дата 14.11.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Jar-файл как раз и лежит в текущем каталоге. Если я из него убираю файл properties, то он его нормальненько считывает из текущего каталого
PM MAIL   Вверх
tux
Дата 14.11.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

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



Цитата(hvzh @  14.11.2006,  15:47 Найти цитируемый пост)
Jar-файл как раз и лежит в текущем каталоге. Если я из него убираю файл properties, то он его нормальненько считывает из текущего каталого 

"Извиняюсь, кто на ком стоял?" (с) Профессор Преображенский

Ну и? А если в CLASS-PATH поместить и текущий каталог и jar что произойдет? Еще не помешал бы код и описание того, как этот код запускается. 
PM MAIL Skype GTalk Jabber YIM   Вверх
hvzh
Дата 14.11.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот код:
Код

    private void openProps()
    {
        FileInputStream inStream;
        String db = null;

        db = (String) combo.getSelectedItem();
        
        try {
            inStream = new FileInputStream("props." + db.toLowerCase());
            props.load(inStream);
            hostField.setText(props.getProperty("dbhostname"));
            dbField.setText(props.getProperty("dbname"));
            nameField.setText(props.getProperty("dbuser"));
        } 
        catch (FileNotFoundException e) {
            showFileError(e);
            e.printStackTrace();
        }
        catch (IOException e)
        {
            showIOError(e);
            e.printStackTrace();
        }
    }


А вот как запускается:

#!/bin/bash

CLASSPATH=.
export CLASSPATH

java -jar my_file.jar

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


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

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



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

А если попробовать запустить вот так
Код

java -cp .:my_file.jar <имя_класса>

что получится? Теоретически тогда загрузчик классов должен искать запрашиваемый ресурс сначала в текущем каталоге, затем в jar.
PM MAIL Skype GTalk Jabber YIM   Вверх
hvzh
Дата 14.11.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Exception in thread "main" java.lang.NoClassDefFoundError: MyClass
PM MAIL   Вверх
LSD
Дата 14.11.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



FileInputStream может читать только из файла, но не из jar-архива. Поэтому это не тот кусок кода, который читает данные.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
hvzh
Дата 14.11.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А по-другому у меня и не читается нигде. Это - единственное место в коде
PM MAIL   Вверх
Metal_Heart
Дата 14.11.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

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



hvzh, рад тебя видеть на нашем форуме!

вот наваял примерчик, как я себе это УПРОЩЕННО представляю:

Код

import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

//-----------------------------------------------------------------
public class TestProperties
{
static final String text = "text";
static final String nameFile = "props.a";
static final String alternativeNameFile = "props.b";
Properties  props = new Properties();

//-----------------------------------------------------------------
public void saveProps(String str)
{
FileOutputStream out;

 try
 {
  out = new FileOutputStream(nameFile);
  props.setProperty(text, str);
  props.store(out, "comments");
  out.close();
 }catch (FileNotFoundException e) {e.printStackTrace();}
   catch (IOException e){e.printStackTrace();}
}
//-----------------------------------------------------------------
public String loadProps()
{
FileInputStream in;
String str="";
String nfile="";

 if(availabelPropsFile(nameFile)) nfile = nameFile;
  else if(availabelPropsFile(alternativeNameFile)) nfile = alternativeNameFile;
   else return "Sorry! No files fund";

 System.out.println("file is: "+nfile);

 try
 {
  in = new FileInputStream(nfile);
  props.load(in);
  str = props.getProperty(text);
  in.close();
 }catch (FileNotFoundException e) {/*showFileError(e);*/ e.printStackTrace();}
   catch (IOException e){/*showIOError(e);*/ e.printStackTrace();}
return str;
}
//-----------------------------------------------------------------
private boolean availabelPropsFile(String nameFile)
{
 try {FileInputStream in = new FileInputStream(nameFile); } catch(FileNotFoundException e) {return false;}

return true;
}
//-----------------------------------------------------------------
public static void main(String[] args)
{
 TestProperties test = new TestProperties();
// test.saveProps("any properties");    //используем для создания файла параметров
 System.out.println(test.loadProps());
}
//-----------------------------------------------------------------
}


Это сообщение отредактировал(а) Metal_Heart - 14.11.2006, 16:52


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
hvzh
Дата 14.11.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, но у меня все примерно так же
PM MAIL   Вверх
Metal_Heart
Дата 14.11.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

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



hvzh, или вернее почти  smile 

Попробуй  понаставить что-то вроде (если нет отладчика) в функцию обращения к ресурсам:
Код

System.out.println("обращение к файлу параметров такому-то из функции ...");


только с этим "из функции ..." надо что-то придумать  smile  чтоб знать кто и куда обращается


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
hvzh
Дата 14.11.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Функция у меня одна (исходники привел выше). Вызывается только один раз при старте программы
PM MAIL   Вверх
Metal_Heart
Дата 14.11.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

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



hvzh, извини, что неудачно объяснил

Ведь у тебя проблем с чтением из файла свойств - нет? Вроде нет.
Зато есть проблемы с поиском этого файла.

Я предлагаю выяснить когда и какая функция (в данном случае будем считать init())  читает эти свойства. А также почему не находит.

Добавлено @ 17:43 
Может сложиться так что читаются оба файла. Сначала искомый, а за ним - тот что по умолчанию.

В общем надо изучать работоспособность функции поиска файлов свойств.
Сделай что-то подобное, как в моем примере:
Код

 if(availabelPropsFile(nameFile)) nfile = nameFile;
  else if(availabelPropsFile(alternativeNameFile)) nfile = alternativeNameFile;
   else return "Sorry! No files fund";



только с подробным выводом в консоль.

п.с.
Приходиться предполагать, раз кода не видно smile


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
hvzh
Дата 14.11.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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


 




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


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

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