Путь к файлу свойств в java

У меня есть файл свойств, который находится в пакете по умолчанию и класс, в котором я использую файл свойств в одном пакете по умолчанию. Если я использую только имя файла без пути, я получаю ошибки. Очевидно, что это неправильно, поскольку я должен дать какой-то путь для ссылки на файл tat. Я построю приложение сделать его как файл jar, так как я должен дать путь, как файл свойств должен идти внутри этого файла jar. Я использую Netbeans ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ.

редактировать

 Properties pro = new Properties();

    try {            
        pro.load(new FileInputStream("pos_config.properties"));
        pro.setProperty("pos_id", "2");
        pro.setProperty("shop_type", "2");
        pro.store(new FileOutputStream("pos_config.properties"), null);
        String pos_id = pro.getProperty("pos_id");
        if(pos_id.equals("")){
           pos_id="0" ;
        }
        global_variables.station_id = Integer.parseInt(pos_id);
        String shop_type = pro.getProperty("shop_type");
        if(shop_type.equals("")){
           shop_type="0" ;
        }
        global_variables.shop_type = Integer.parseInt(shop_type);
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }

6 ответов


использовать getClass().getResourceAsStream("foo.properties")

но обратите внимание, что использование пакета по умолчанию не рекомендуется (выше будет работать с любым пакетом).

ваш код не работает, потому что FileInputStream(..) использует пути относительно текущего каталога пользователя (см. java.io.File документации). Поэтому он ищет foo.properties на /home/usr/ или c:\documents and settings\usr. С вашего .properties файл находится на пути к классам, вы можете прочитать его как таковой-throug Class.getResourceAsStream(..) метод.


как указывали другие, вы должны загрузить его из пути к классам, а не как файл, если вы хотите иметь возможность загрузить его из банки. Вы хотите класса.getResourceAsStream () способ или загрузчика.getResourceAsStream () метод. Однако, используя getClass().getResourceAsStream("pos_config.properties") опасно, потому что вы используете путь, который разрешен относительно данного класса, и подкласс может изменить местоположение, против которого он разрешен. Поэтому безопаснее всего назвать абсолютный путь внутри банки:

getClass().getResourceAsStream("/pos_config.properties")

или даже лучше, используйте литерал класса вместо getClass ():

Foo.class.getResourceAsStream("pos_config.properties")

вы пытаетесь получить файл свойств из текущего рабочего каталога или пытаетесь получить его как ресурс? Звучит так, как будто вы должны использовать.

InputStream is = getClass().getResourceAsStream(filename);
properties.load(is);

чтобы загрузить файл из текущего каталога

properties.load(new FileInputStream(filename));

Я думаю, что вы действительно хотите это.

try {            
    Properties pro = new Properties();
    pro.load(new FileInputStream("pos_config.properties"));
    String pos_id = pro.getProperty("pos_id");
    try {
        global_variables.station_id = Integer.parseInt(pos_id);
    } catch(Exception e) {
        global_variables.station_id = 0;
    }
    String shop_type = pro.getProperty("shop_type");
    try {
        global_variables.shop_type = Integer.parseInt(shop_type);
    } catch(Exception e) {
        global_variables.shop_type = 0;
    }
} catch (IOException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}

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

в Eclipse вы можете создать исходную папку с:

щелкните правой кнопкой мыши - > создать - > исходная папка

Я уверен, что есть что-то подобное в Netbeans. Положи туда все свои документы. Позже вы можете получить к ним доступ со следующим кодом:

AnyClass.class.getResource("/image.png")

поэтому для вашей конкретной проблемы вы получите доступ к ней следующим образом:

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));

в статическом методе я использую

загрузчика.getSystemResourceAsStream ("name.свойства");


это не будет компилироваться:

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));

назначение:

pro.load(YourClass.class.getResourceAsStream("/pos_config.properties")));