Путь к файлу свойств в 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")));
это не будет компилироваться:
pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));
назначение:
pro.load(YourClass.class.getResourceAsStream("/pos_config.properties")));