Разное

Java properties пример: все основные примеры работы с файлами

Содержание

JPA/Hibernate и PostgreSQL: примеры настройки

Перед тем, как соединяться из Hibernate с PostgreSQL, не забудьте создать пользователя, базу данных и предоставить пользователю права на неё:

CREATE ROLE test WITH PASSWORD ‘test’; ALTER ROLE test WITH LOGIN; CREATE DATABASE test OWNER test;

CREATE ROLE test WITH PASSWORD ‘test’;

ALTER ROLE test WITH LOGIN;

CREATE DATABASE test OWNER test;

Команды выше создают пользователя test с паролем test, создают базу данных test и назначают пользователя владельцем базы. В условиях реального приложения, разумеется, следует выбрать пароль посложнее.

Перед тем, как использовать PostgreSQL, необходимо добавить его JDBC драйвер в зависимости maven:

<properties> <postgresql.version>9.4.1212.jre7</postgresql.version> </properties> <dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${postgresql.version}</version> </dependency> </dependencies>

<properties>

  <postgresql.version>9.4.1212.jre7</postgresql.version>

</properties>

 

<dependencies>

  <dependency>

    <groupId>org.postgresql</groupId>

    <artifactId>postgresql</artifactId>

    <version>${postgresql.version}</version>

  </dependency>

</dependencies>

С драйвером PostgreSQL в classpath можно настраивать Hibernate как JPA провайдер. Напоминаю, что все настройки JPA находятся в файле META-INF/persistence.xml

<persistence xmlns=»http://java.sun.com/xml/ns/persistence» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd» version=»2.0″> <persistence-unit name=»ru.easyjava.data.jpa.hibernate»> <properties> <property name=»hibernate.hbm2ddl.auto» value=»update»/> <property name=»hibernate.connection.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/> <property name=»hibernate.connection.username» value=»test»/> <property name=»hibernate.connection.password» value=»test»/> <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/> </properties> </persistence-unit> </persistence>

<persistence xmlns=»http://java.sun.com/xml/ns/persistence»

             xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»

             xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd»

             version=»2.0″>

    <persistence-unit name=»ru.easyjava.data.jpa.hibernate»>

        <properties>

            <property name=»hibernate.hbm2ddl.auto» value=»update»/>

            <property name=»hibernate.connection.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/>

            <property name=»hibernate.connection.username» value=»test»/>

            <property name=»hibernate.connection.password» value=»test»/>

            <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/>

        </properties>

    </persistence-unit>

</persistence>

JDBC url у PostgreSQL имеет следующий формат: jdbc:postgresql://хост:порт/имябазы, например jdbc:postgresql://127.0.0.1:5432/test. Имя пользователя и пароль передаются отдельными параметрами. Наконец, надо не забыть переключить диалект Hibernate на PostgreSQL, что делается в последней строке.

Однако, как мы знаем, одно соединение не очень удобно использовать в реальном приложении. Поэтомунастроим пул c3p0 для совместного использования сJPA/Hibernate и PostgreSQL.

Для этого, кроме PostgreSQL JDBC драйвера,  надо добавить непосредственно c3p0 и библиотеку hibernate-cp30 к зависимостям maven:

<properties> <hibernate.version>5.2.1.Final</hibernate.version> <c3p0.version>0.9.5.2</c3p0.version> </properties> <dependencies> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>${c3p0.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${hibernate.version}</version> </dependency> </dependencies>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<properties>

  <hibernate.version>5.2.1.Final</hibernate.version>

  <c3p0.version>0.9.5.2</c3p0.version>

</properties>

 

<dependencies>

  <dependency>

    <groupId>com.mchange</groupId>

    <artifactId>c3p0</artifactId>

    <version>${c3p0.version}</version>

  </dependency>

 

  <dependency>

    <groupId>org.hibernate</groupId>

    <artifactId>hibernate-c3p0</artifactId>

    <version>${hibernate.version}</version>

  </dependency>

</dependencies>

Для включения c3p0 достаточно добавить по меньшей мере один параметр c3p0 к настройкам Hibernate:

<persistence xmlns=»http://java.sun.com/xml/ns/persistence» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd» version=»2.0″> <persistence-unit name=»ru.easyjava.data.jpa.hibernate»> <properties> <property name=»hibernate.hbm2ddl.auto» value=»update»/> <property name=»hibernate.connection.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/> <property name=»hibernate.connection.username» value=»test»/> <property name=»hibernate.connection.password» value=»test»/> <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/> <property name=»hibernate.c3p0.min_size» value=»5″/> </properties> </persistence-unit> </persistence>

<persistence xmlns=»http://java.sun.com/xml/ns/persistence»

             xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»

             xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd»

             version=»2.0″>

    <persistence-unit name=»ru.easyjava.data.jpa.hibernate»>

        <properties>

            <property name=»hibernate.hbm2ddl.auto» value=»update»/>

            <property name=»hibernate.connection.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/>

            <property name=»hibernate.connection.username» value=»test»/>

            <property name=»hibernate.connection.password» value=»test»/>

            <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/>

            <property name=»hibernate.c3p0.min_size» value=»5″/>

        </properties>

    </persistence-unit>

</persistence>

Остальные параметры остаются такими же, как и для PostgreSQL без c3p0.

К сожалению, в Hibernate нет настолько высококачественной поддержки HikariCP, аналогичной c3p0. Поэтому настройка HikariCP требует чуть чуть больше работы.

В первую очередь, конечно же, надо добавить ещё и артефакт HikariCP в зависимости (не забываем про PostgeSQL JDBC драйвер):

<properties> <hikaricp.version>2.4.3</hikaricp.version> </properties> <dependencies> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>${hikaricp.version}</version> </dependency> </dependencies>

<properties>

  <hikaricp.version>2.4.3</hikaricp.version>

</properties>

 

<dependencies>

  <dependency>

    <groupId>com.zaxxer</groupId>

    <artifactId>HikariCP</artifactId>

    <version>${hikaricp.version}</version>

  </dependency>

</dependencies>

Потом необходимо изменить конфигурацию JPA/Hibernate для работы с HikariCP:

<persistence xmlns=»http://java.sun.com/xml/ns/persistence» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd» version=»2.0″> <persistence-unit name=»ru.easyjava.data.jpa.hibernate»> <properties> <property name=»hibernate.hbm2ddl.auto» value=»update»/> <property name=»hibernate.connection.provider_class» value=»com.zaxxer.hikari.hibernate.HikariConnectionProvider»/> <property name=»hibernate.hikari.dataSourceClassName» value=»org.postgresql.ds.PGSimpleDataSource»/> <property name=»hibernate.hikari.dataSource.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/> <property name=»hibernate.hikari.username» value=»test»/> <property name=»hibernate.hikari.password» value=»test»/> <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/> </properties> </persistence-unit> </persistence>

<persistence xmlns=»http://java.sun.com/xml/ns/persistence»

             xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»

             xsi:schemaLocation=»http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd»

             version=»2.0″>

    <persistence-unit name=»ru.easyjava.data.jpa.hibernate»>

        <properties>

            <property name=»hibernate.hbm2ddl.auto» value=»update»/>

            <property name=»hibernate.connection.provider_class» value=»com.zaxxer.hikari.hibernate.HikariConnectionProvider»/>

            <property name=»hibernate.hikari.dataSourceClassName» value=»org.postgresql.ds.PGSimpleDataSource»/>

            <property name=»hibernate.hikari.dataSource.url» value=»jdbc:postgresql://127.0.0.1:5432/test»/>

            <property name=»hibernate.hikari.username» value=»test»/>

            <property name=»hibernate.hikari.password» value=»test»/>

            <property name=»hibernate.dialect» value=»org.hibernate.dialect.PostgreSQL94Dialect»/>

        </properties>

    </persistence-unit>

</persistence>

Все настройки соединения с PostgreSQL переименовываются и к ним добавляется два дополнительных параметра. Вначале в Hibernate настраивается использование HikariCP, затем указывается какой класс использовать для соединения с PostgreSQL.

Spring .properties файл: получить элемент как массив

I’m loading properties attributes from a .properties file using Spring as follows:

file: elements.properties
base.module.elementToSearch=1
base.module.elementToSearch=2
base.module.elementToSearch=3
base.module.elementToSearch=4
base.module.elementToSearch=5
base.module.elementToSearch=6

The spring xml file

file: myapplication.xml
<bean
        >
         <property name="property" value="#{base.module.elementToSearch}" />
</bean>

And my Class.java

file: Class.java
public void setProperty(final List<Integer> elements){
       this.elements = elements;
}

But when debugging, the parameter elements only get the last element into the list, so, there is a list of one element with value «6», instead of a list with 6 elements.

I tried other approaches, like adding in value only #{base.module} but then it finds no parameter in the properties file.

A workaround is to have in elements.properties file a list separated by commas, like:

base.module.elementToSearch=1,2,3,4,5,6

and use it as a String and parse it, but is there a better solution?

я загружаю свойства атрибутов из .properties файла, используя Spring следующим образом:

file: elements.properties 
base.module.elementToSearch=1 
base.module.elementToSearch=2 
base.module.elementToSearch=3 
base.module.elementToSearch=4 
base.module.elementToSearch=5 
base.module.elementToSearch=6 

весна XML файл

file: myapplication.xml 
<bean 
    > 
     <property name="property" value="#{base.module.elementToSearch}" /> 
</bean> 

И мой класс. java

file: Class.java 
public void setProperty(final List<Integer> elements){ 
    this.elements = elements; 
} 

Но при отладке элементы параметров получают только последний элемент в списке, s o, есть список одного элемента со значением «6», а не список из 6 элементов.

Я пробовал другие подходы, такие как добавление только значения #{base.module}, но затем он не обнаружил никаких параметров в файле свойств.

Обойти это иметь в elements.properties файл списка разделенных запятыми, например:

base.module.elementToSearch=1,2,3,4,5,6 

и использовать его в виде строки и разобрать его, но есть лучшее решение?

java spring placeholder properties-file60k

Структура проекта плагина | 1C:Enterprise Development Tools Plugin Developer Guide

Откройте панель Package Explorer. Проект демонстрационного плагина имеет следующую структуру.

.
├── README.md                            README
├── checkstyle.xml                       Правила проверки кодстайла // https://checkstyle.sourceforge.io/
├── LICENSE                              Файл с лицензией
├── pom.xml                              Корневой POM-файл
├── bom
|    └── pom.xml                         Родительский POM-файл с описанием плагинов и их версий
├── bundles
    ├── org.example                      Плагин с расширением валидации модуля
    ...
    └── org.example.ui                   Плагин с примером конструктор движений
    |    ├── .settings/                  Настройки Eclipse плагина
    |    ├── META-INF                    Дескриптор OSGi-модуля
    |    ├── src/org/example/ui/         Java код плагина
    |    ├── resources                   Дополнительные файлы для плагина
    |    ├── .project                    Дескриптор проекта Eclipse
    |    ├── .classpath                  Настройки компиляции
    |    ├── build.properties            Настройки компиляции
    |    ├── plugin.properties           Локализация плагина
    |    ├── plugin.xml                  Дескриптор плагина
    |    └── pom.xml                     POM-файл плагина
    └── pom.xml                          Корневой POM-файл плагинов
├── features
    ├── org.example.feature              Eclipse фича с плагином
    |    └── feature.xml                 Дескриптор фичи
    └── org.example.sdk.feature          Eclipse фича с плагином + исходники плагина
├── repositories
    ├── org.example.repository           P2 репозиторий с плагином
    └── org.example.repository.sdk       SDK P2 репозиторий с плагином
└── targets
    └── default
            └── default.target           Файл описания целевой платформы для Eclipse
└── tests                                
    ├── org.example.itests               Интеграционные тесты плагина
    |    ├── .settings/                  Настройки Eclipse плагина
    |    ├── META-INF                    Дескриптор OSGi-модуля
    |    ├── src/org/example/itests/     Java код интеграционных тестов
    |    ├── workspace                   Папка с проектами для тестов
    |        └── test                    Тестовый проект с конфигурацией
    |    ├── .project                    Дескриптор проекта Eclipse
    |    ├── .classpath                  Настройки компиляции
    |    ├── build.properties            Настройки компиляции
    |    ├── plugin.properties           Локализация плагина
    |    ├── plugin.xml                  Дескриптор плагина
    |    └── pom.xml                     POM-файл плагина
    └── pom.xml                          Корневой POM-файл тестов

Создание приложения Swing Maven с использованием Hibernate

Поскольку POJO представляет собой простой класс Java, вы можете использовать мастер создания классов Java, чтобы создать класс, а затем изменить класс в редакторе исходного кода, чтобы добавить необходимые поля и методы получения и установки. После создания объекта POJO мастер также можно использовать для создания файла сопоставления библиотеки Hibernate, обеспечивающего сопоставления класса с таблицей, и добавления информации о сопоставлении в файл hibernate.cfg.xml . При создании файла сопоставления «с нуля» необходимо сопоставить поля и столбцы в редакторе XML.

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

  1. Щелкните правой кнопкой мыши узел «Source Packages» в окне «Projects» и выберите «New > Java Class» для открытия мастера создания класса Java.

  2. В мастере введите Actor в качестве имени класса и sakila.entity в качестве имени пакета. Нажмите кнопку «Завершить».

  3. Внесите в класс следующие изменения (выделены полужирным шрифтом) для реализации интерфейса «Serializable» и добавьте поля для столбцов таблицы.

public class Actor *implements Serializable* {
    *private Short actorId;
    private String firstName;
    private String lastName;
    private Date lastUpdate;*
}
  1. Создайте методы получения и установки для полей, поместив курсор вставки в редактор исходного кода и введя Alt-Insert, а затем выбрав Getter и Setter.

  2. В диалоговом окне «Generate Getters and Setters» выберите все поля и нажмите кнопку «Generate».

Figure 17. Диалоговое окно ‘Создание методов получения и установки’

В диалоговом окне «Generate Getters and Setters» можно использовать стрелку вверх на клавиатуре для перемещения выбранного элемента к узлу «Actor», а затем нажать клавишу «пробел» и выбрать все поля «Actor».

  1. Исправьте операторы импорта и сохраните измененные данные.

После создания объекта POJO для таблицы необходимо создать файл сопоставления библиотеки Hibernate для класса Actor.java .

  1. Щелкните правой кнопкой мыши узел исходных файлов sakila.entity в окне «Projects» и выберите «New > Other» для открытия мастера создания файла «New File».

  2. Выберите «Файл сопоставления Hibernate» в категории «Hibernate». Нажмите кнопку «Далее».

  3. Введите Actor.hbm в поле «Имя файла» и укажите в качестве папки src/sakila/entity. Нажмите кнопку «Далее».

  4. Введите sakila.entity.Actor в поле «Класс для размещения».

  5. Выберите actor из раскрывающегося списка «Таблица базы данных», если это значение не было выбрано ранее. Нажмите кнопку «Завершить».

Figure 18. Мастер создания файлов сопоставления Hibernate

После выбора ‘Готово’ файл сопоставления Hibernate Actor.hbm.xml открывается в редакторе исходного кода. Также в среде IDE выполняется автоматическое добавление записи для ресурса сопоставления в hibernate.cfg.xml . В целях просмотра подробных данных разверните узел «Mapping» в режиме проектирования hibernate.cfg.xml или в режиме XML. Запись mapping в обзоре XML будет выглядеть следующим образом:

        <mapping resource="sakila/entity/Actor.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
  1. Сопоставьте поля в Actor.java со столбцами в таблице «ACTOR» путем внесения следующих изменений (выделены полужирным шрифтом) в Actor.hbm.xml .

<hibernate-mapping>
  <class name="sakila.entity.Actor" *table="actor">
    <id name="actorId" type="java.lang.Short">
      <column name="actor_id"/>
      <generator/>
    </id>
    <property name="firstName" type="string">
      <column length="45" name="first_name" not-null="true"/>
    </property>
    <property name="lastName" type="string">
      <column length="45" name="last_name" not-null="true"/>
    </property>
    <property name="lastUpdate" type="timestamp">
      <column length="19" name="last_update" not-null="true"/>
    </property>
  </class>*
</hibernate-mapping>

Для заполнения значений при изменении файла сопоставления можно использовать функцию автозавершения кода.

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

<hibernate-mapping>
  <class name="sakila.entity.Actor" *table="actor">
  </class>*
</hibernate-mapping>
  1. Нажмите кнопку «Validate XML» на панели инструментов и сохраните изменения.

Создание объектов POJO и файлов сопоставления библиотеки Hibernate может эффективно использоваться для дальнейшей настройки приложения.

Настройка загрузки набора ресурсов при помощи класса ResourceBundle.Control

В советах от 17 июня 2005 года Beyond J2SE 5.0 и Collaborating With Sun on Mustang были приведены сведения по использованию Java SE 6. Данная платформа все еще находится на раннем этапе разработки, но существует возможность отсеживать новые тенденции и тестировать новые возможности. Одной из новых возможностей является расширенный контроль использования наборов ресурсов (окончательное включение данной возможности находится на рассмотрении в JCP).

Наборы ресурсов применяются для локализации приложений. Их использоание обсуждалось в совете от 14 декабря 2004 года Resource Bundle Loading. Основной функцией наборов ресурсов является сопоставление различных строк локализованным ресурсам, таким образом, что изображения и строки отображаются на различных языках.

Управление набором ресурсов производится классом ResourceBundle, находящимся в пакете java.util package. Основой процесса работы с набором ресурсов является получение набора при помощи метода getBundle() класса ResourceBundle. Ниже приводится пример использования данного метода:

import java.util.*;public class Test1 {
  public static void main(String args[]) {
    Locale locale = Locale.ENGLISH;
    ResourceBundle myResources = ResourceBundle.getBundle("MyResources",
        locale);
    String string = myResources.getString("HelpKey");
    System.out.println("HelpKey: " + string);
  }
}

Программа Test1 получает набор под названием MyResources. Затем она получает из набора ресурс HelpKey и выводит значение данного ресурса.

Файл MyResources может быть представлен либо в виде класса:

import java.util.*;public class MyResources extends ListResourceBundle {
  public Object[][] getContents() {
    return new Object[][] { { "OkKey", "OK" }, { "CancelKey", "Cancel" },
        { "HelpKey", "Help" }, { "YesKey", "Yes" }, { "NoKey", "No" }, };
  }
}

либо в виде файла, именуемого MyResources.properties, содержащего пары ключ-значение:

OkKey=OK
CancelKey=Cancel
HelpKey=Help
YesKey=Yes
NoKey=No

Что если вы хотите сохранять набор ресурсов в XML файле? Существует два способа загрузки файлов при помощи класса java.util.Properties. Первый способ позволяет читать файлы вида key=value, используя метод load(). Второй способ дает возможность чтения свойств из XML файла при помощи метода loadFromXML(). Благодаря наличию нового встроенного класса Control в наборе классов ResourceBundle, вы можете получать доступ к набору ресурсов, хранящемуся в виде XML файла.

Для дальнейшего тестирования вам необходимо загоусить последнюю версию Mustag с адреса Mustang project home page.

В классе ResourceBundle.Control существует набор внешних методов, вызываемых методом ResourceBundle.getBundle() во время поиска и загрузки наборов. Создав свой класс Control, вы можете изменить поведение по-умолчанию для загрузки и кеширования.

В данном случае вам необходимо создать реализацию двух методов класса Control: getFormats() и newBundle(). Метод getFormats() отвечает за поддержку формата XML, а newBundle() работает с набором ресурсов. В базовом классе Control существуют вспомогательные методы, предназначенные для преобразования основных имен наборов в действительные имена ресурсов.

В данную реализацию класса ResourceBundle.Control включен подкласс XMLResourceBundle. Данный подкласс используется для загрузки данных из XML файла и использовании их в методе ResourceBundle.

Ниже приводится описание класса Control и реализация метода ResourceBundle:

import java.io.*;
import java.net.*;
import java.util.*;public class XMLResourceBundleControl extends ResourceBundle.Control {
  private static String XML = "xml";

 

public List getFormats(String baseName) {
    return Collections.singletonList(XML);
  }

 

public ResourceBundle newBundle(String baseName, Locale locale,
      String format, ClassLoader loader, boolean reload)
      throws IllegalAccessException, InstantiationException, IOException {
    if ((baseName == null) || (locale == null) || (format == null)
        || (loader == null)) {
      throw new NullPointerException();
    }
    ResourceBundle bundle = null;
    if (format.equals(XML)) {
      String bundleName = toBundleName(baseName, locale);
      String resourceName = toResourceName(bundleName, format);
      URL url = loader.getResource(resourceName);
      if (url != null) {
        URLConnection connection = url.openConnection();
        if (connection != null) {
          if (reload) {
            connection.setUseCaches(false);
          }
          InputStream stream = connection.getInputStream();
          if (stream != null) {
            BufferedInputStream bis = new BufferedInputStream(
                stream);
            bundle = new XMLResourceBundle(bis);
            bis.close();
          }
        }
      }
    }
    return bundle;
  }

 

private static class XMLResourceBundle extends ResourceBundle {
    private Properties props;

    XMLResourceBundle

(InputStream stream) throws IOException {
      props = new Properties();
      props.loadFromXML(stream);
    }

   

protected Object handleGetObject(String key) {
      return props.getProperty(key);
    }

   

public Enumeration getKeys() {
      Set handleKeys = props.stringPropertyNames();
      return Collections.enumeration(handleKeys);
    }
  }

 

public static void main(String args[]) {
    ResourceBundle bundle = ResourceBundle.getBundle("Test2",
        new XMLResourceBundleControl());
    String string = bundle.getString("HelpKey");
    System.out.println("HelpKey: " + string);
  }
}

В данную реализацию включена тестовая программа из трех строчек:

ResourceBundle bundle = ResourceBundle.getBundle("Test2", new XMLResourceBundleControl());
String string = bundle.getString("HelpKey");
System.out.println("HelpKey: " + string);

Наибольший интерес здесь представляет первая строка. Вам необходимо передать ваш элемент Control методу getBundle(). После этого вы можете использовать набор, как и в любом другом случае.

Ниже преводится пример XML файла Test2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <entry key="OkKey">OK</entry>
    <entry key="CancelKey">Cancel</entry>
    <entry key="HelpKey">Help</entry>
    <entry key="YesKey">Yes</entry>
    <entry key="NoKey">No</entry>
</properties>

Результатом выполнения программы XMLResourceBundleControl будет:

> java XMLResourceBundleControl
HelpKey: Help

В приведенной реализации не используются методы getTimeToLive() и needsReload():

public long getTimeToLive(String baseName, Locale locale)public boolean needsReload(String baseName,
   Locale locale,
   String format,
   ClassLoader loader,
   ResourceBundle bundle,
   long loadTime)

Метод getTimeToLive() возвращает время жизни для наборов ресурсов, созданных при помощи ResourceBundle.Control. Наборы ресурсов сохраняются в кеше для убыстрения процесса повторной загрузки. Таким образом, при повторной загрузке набора, он будет находиться в кеше. Положительное значение времени жизни затает в милисекундах продолжительность сохранения набора в кеше без повторной проверки. По-умолчанию значением, возвращаемым методом getTimeToLive() является TTL_NO_EXPIRATION_CONTROL, отключающее проверку истечения времени хранения в кеше. Если вы не хотите кешировать набор, то верните значение TTL_DONT_CACHE. Если возвращается значение 0, то набор кешируется, но при каждом вызове метода getBundle() происходит его проверка. Для очистки кеша вызовите статичный метод clearCache() класса ResourceBundle. В нем есть не обязательный аргумент ClassLoader, позволяющий очищать кеши, созданные определенным загрузчиком.

Метод needsReload() определяет необходимость перезагрузки кешированного набора. Значение true означает, что набор необходимо перезагрузить, а false, что не его перезагружать не надо. Вы можете контролировать необходимость перезагрузки набора ресурсов при помощи перегрузки метода needsReload(). Например, если вы хотите, чтобы набор ресурсов всегда перезагружался, метод needsReload() должен всегда возвращать значние true. В этом случае метод getTimeToLive() должен возвращать всегда значение 0. Иначе набор будет сохраняться дольше, чем положено.

Для получения дополнительной информации об улучшениях, связанных с процессами интернационализации в Mustang, вы можете обратиться к блогу Джона Оконера, разработчика програмнного обеспечения фирмы Sun, по адресу Overview of Mustang’s internationalization features.

Java Properties — Справочный центр Smartling

Файл примера свойств Java:

#Global
selfservice.global.buttons.ok = Ok
selfservice.global.buttons.cancel = Отменить
selfservice.global.buttons.save = Сохранить
selfservice.global.buttons.saveChanges = Сохранить изменения
selfservice.global. buttons.close = Закройте
selfservice.global.buttons.edit = Отредактируйте
selfservice.global.buttons.enable = Включить
selfservice.global.buttons.disable = Отключить
selfservice.global.buttons.next = Далее
selfservice.global.buttons.continue = Продолжить
selfservice.global.buttons.back = Назад
selfservice.global.buttons. finish = Finish
selfservice.global.state.on = On
selfservice.global.state.off = Off

# Menus
selfservice.menu.settings.title = Настройки
selfservice.menu.settings.subtitle = Настройки
selfservice.menu.settings.languageSelector = Выбор языка
selfservice.menu.settings.siteOwnerInfo = Информация о владельце сайта

# Welcome
selfservice.intro = Здравствуйте {0}, добро пожаловать

Каждая строка создается с метаданными ключа / варианта на основе ключей в файле. Если ключи разные для двух строк с одинаковым значением, Smartling создаст две строки, используя ключ в качестве метаданных контекста. Недопустимо иметь один и тот же ключ в одном файле ресурсов, хотя Smartling не будет сообщать об ошибках для такого файла.

Просмотрите раздел «Форматирование и экранирование», внимательно просмотрите свои исходные файлы и протестируйте двусторонний переход с помощью Smartling с использованием загрузки псевдо-перевода, чтобы определить правильную интеграцию, прежде чем начинать перевод со строками из файлов свойств Java.

При захвате строк из файла свойств Java Smartling предполагает, что строки используются для Format и MessageFormat. Это имеет два специфических значения для того, как мы захватываем и доставляем строки, а также обрабатываем автоматическую интеграцию переменных в качестве заполнителей.

Поведение по умолчанию такое же, как если бы вы интегрировались со следующими командами

placeholder_format = JAVA
string_format = MESSAGE_FORMAT

placeholder_format = JAVA подразумевает, что строки форматируются с использованием java.util.Formatter. Строка, использующая этот класс, будет иметь стандартные спецификаторы формата c-style / printf для переменных, и потому что эти переменные используют символ процента ‘%’, чтобы пометить их, когда вы хотите, чтобы фактический символ процента отображался в вашей строке, вы должны экранировать его как ‘ %% ‘(как в исходной, так и в переведенной строке).

string_format = MESSAGE_FORMAT означает, что строки форматируются с использованием java.text.MessageFormat. Строка, использующая этот класс, будет иметь FormatElements в фигурных скобках, и поскольку символ одинарной кавычки используется для экранирования специальных символов {и}, одиночная кавычка, которая должна отображаться как символ, должна быть экранирована как » (как в оригинале, так и в в переведенных строках)

Наиболее частые проблемы интеграции, возникающие в Smartling при использовании файлов свойств java, вызваны тем, что ваш файл не интегрируется для получения поведения, необходимого для строк в отношении форматирования заполнителей и экранирования специальных символов.

Например, если в исходном файле:

строка = На вашу подписку действует скидка% d%.

Строка, захваченная Smartling, будет иметь некорректную интеграцию заполнителя и не сможет быть правильно переведена. Строго говоря, «% o» — допустимый спецификатор формата. Есть два способа избежать этой проблемы интеграции.

Если ваши строки отформатированы с помощью Formatter,% в файле ресурсов следует экранировать:

string1 = На вашу подписку действует скидка% d %%.

И наоборот, если у вас есть такая строка:

string = Ваша подписка со скидкой 50%.

Это НЕ форматируется с помощью Formatter Smartling по-прежнему будет определять заполнитель («% o») по той же причине. Чтобы избежать захвата этой строки с помощью заполнителя, отключите форматирование, а затем снова включите его, если вам нужно, чтобы следующие строки были захвачены и готовы к форматированию:

smartling.placeholder_format = NONE
string = Ваша подписка со скидкой 50%.
# smartling.placeholder_format = JAVA

С этой интеграцией строка будет захвачена без заполнителя, и, если предположить, что% char все еще присутствует в переводе, он не будет экранирован как %% при загрузке переведенных файлов.

Аналогичные проблемы наблюдаются для поведения MessageFormat. Если в исходном файле есть эта строка, которая будет передана через MessageFormat:

string1 = Вы не можете удалить {0} .

Символ ‘следует экранировать, если он проходит через MessageFormat:

string1 = Вы не можете удалить {0}

Аналогично, если у вас есть строка с буквенными символами {} или символом, который НЕ проходит через MessageFormat:

string1 = Вы не можете удалить его.{Мы вам не позволим!}

Вы можете обеспечить надлежащий захват и доставку перевода, отключив MessageFormat, а затем снова включив его, когда это необходимо, после строки, чтобы гарантировать, что последующие строки получат обработку MessageFormat:

smartling.string_format = NONE
string1 = Вы не можете удалить его. {Мы вам не позволим!}
# smartling.string_format = MESSAGE_FORMAT

При интеграции директив «inline» в ваш файл, как только вы установите директиву, она будет применяться ко всем последующим строкам.Так, например, если вы знаете, что ваш файл полностью состоит из строк, для которых требуется MESSAGE_FORMAT, но не форматирование JAVA, вы можете разместить следующее в верхней части файла:

smartling.string_format = MESSAGE_FORMAT

smartling.placeholder_format = НЕТ

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

Мы рекомендуем загрузить полный набор файлов свойств Java, а затем загрузить псевдоперевод, а затем использовать его, чтобы запустить приложение с псевдолокализацией, чтобы проверить наличие проблем или ошибок.

Дополнительные сведения о заполнителях см. В разделе «Заполнители» в файлах ресурсов.

Для файлов, использующих Parser версии 3, Smartling автоматически захватывает и отображает комментарии к файлам в качестве инструкций для переводчиков. Комментарии должны непосредственно предшествовать строке.

Например, для следующего комментария текст «Метка кнопки« Назад »будет записан как файловая инструкция.

# Метка кнопки "Назад"
Назад = Назад

При использовании file / get для загрузки файлов свойств из Smartling параметр includeOriginalStrings = false гарантирует, что если переводы недоступны, Smartling вернет пустую строку. Если для параметра установлено значение true, Smartling возвращает исходную строку.

Формат
# smartling.[имя_директивы] = [значение]

entity_escaping

Точная доставка зависит от типа файла.

Значения авто (по умолчанию)
истина (или да)
ложь (или нет)
Описание Может контролировать, будут ли символы «экранированы» в сущности при доставке переводов. Это можно установить универсально для всего файла через API или установив директиву в верхней части / начале файла.Директива также может быть встроена для управления поведением определенных строк.
Примеры

Для использования inline:
# smartling.entity_escaping = false

Строка:
# smartling.entity_escaping = auto

Например, ваш перевод может выглядеть так:
Smartling HTML с экранированием <> & "пример строки4

По умолчанию, используя настройку «авто», мы предполагаем, что это HTML из тега


, и он будет преобразован в:
Smartling HTML с экранированием & lt; & gt; & amp; & quot; пример string4

Используя smartling.entity_escaping = false позволит Smartling HTML с экранированием <> & "пример строки4 отображаться должным образом.

entity_escaping_type
Значения размножить | нет
Описание

Используется для сохранения экранирования объекта для всех неосновных объектов. Например, обычно мы переворачиваем & copy; в ©, но если мы используем эту новую директиву, перевод автоматически обновится, чтобы использовать экранирование из источника.Для каждого символа сущности мы проверим, был ли он экранирован в источнике, и попытаемся сопоставить (распространить) его в цели.

По умолчанию нет , что является текущим поведением, которое распознает только сущности HTML4 — если также требуются сущности HTML5, вы должны использовать директиву entity_escaping_type = распространять.


Распространение затронет только неосновных сущностей — все именованные сущности , кроме & amp; , & quot ;, & lt ;, & gt; .Базовые сущности по-прежнему контролируются обнаружением HTML и директивой entity_escaping .


Если один и тот же символ как экранированный, так и неэкранированный в одной строке spread вернет экранированные символы в переводе в том же порядке, в каком они были в исходном тексте. Однако, если в переводе есть другое количество символов, в котором процесс перевода удалил или добавил некоторые из них, и экранирование несовместимо между ними, распространение будет экранировать все сущности для этого символа.

Эта директива может быть встроена в API или в шаблон (проконсультируйтесь с вашим SA по поводу настройки шаблонов директив).

Это вообще не влияет на исходный контент, поэтому его использование не приведет к появлению новых строк.

Числовые объекты вообще не рассматриваются этой директивой и обрабатываются как обычно.

Примеры

Чтобы использовать встроенный:
# smartling.entity_escaping_type = распространять

обратная косая черта_escaping_characters
Значения Последовательность символов, которую нужно убрать с помощью бегунка «\» при загрузке.Пробелы игнорируются.
Описание Применяет экранирование обратной косой черты для пользовательских символов.
Примеры

# smartling.backslash_escaping_characters = «@%

placeholder_format
Значения НЕТ; C; IOS; ПИТОН; ЯВА; YAML; QT, RESX
Описание Используется для указания стандартного формата заполнителя.
Примеры

# smartling.placeholder_format = iOS

Задает заполнители в стиле iOS для файла.

placeholder_format_custom
Значения 1) Пользовательское регулярное выражение, совместимое с Perl.
2) NULL — отключает любые текущие пользовательские заполнители
Описание Задает настраиваемый формат заполнителя.Любой текст в вашем файле, соответствующий указанному вами регулярному выражению, будет записан как заполнитель.
Примеры

# smartling.placeholder_format_custom = \ [. +? \]

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

псевдоинфляция
Значения integer — допустимые значения 0-100
Описание Устанавливает процент увеличения исходных строк при загрузке псевдопереводов.Если эта директива не установлена, псевдотрансляции на 30 процентов длиннее исходных строк.
Примеры

# smartling.pseudo_inflation = 80

Загруженные псевдопереводы увеличивают длину исходных строк на 80 процентов.

формат_строки
Значения MESSAGE_FORMAT (по умолчанию) или НЕТ
Описание Формат строки — это директива синтаксического анализатора для специализированной обработки файлов, которая включает правила экранирования строк и предварительной обработки, определенные различными сторонними обработчиками ресурсов.По умолчанию используется MessageFormat, стандартный обработчик ресурсов Java.
Примеры

string_format_paths
Значения Значение этой директивы выражается как [формат]: [ключи].
Описание

Определяет формат строк для указанных путей и может включать другие форматы внутри файлов свойств.

  • В настоящее время поддерживаются следующие форматы:
    • HTML — строковое значение будет проанализировано как HTML
    • MARKDOWN (или MD) — строковое значение будет проанализировано как GitHub Markdown
    • JSON — строковое значение будет проанализировано как JSON
    • PLAIN_TEXT (или TXT) — строковое значение будет проанализировано как обычный текст
    • @default — строковое значение (обратите внимание на знак «at») будет рассматриваться как простой текст.
    • NONE — сбросить все настройки для директивы string_format_paths
      (Примечание: все ссылки на формат нечувствительны к регистру)
  • Разделите несколько форматов запятыми
  • Вы можете указать один ключ для формата или список ключей, разделенных запятыми, заключенный в квадратные скобки. Список может быть пустым.
  • Кроме того, ключи могут содержать один или несколько подстановочных знаков (*) для обозначения группы ключей.
Примеры

Smartling анализирует значения всех ключей как HTML.

 # smartling.string_format_paths = html: * 
java.html.string1 =
текст извлекается из тегов блока

… разбор двух разных типов контента

 # smartling.string_format_paths = HTML: html. *, Markdown: md. * 
java.html.string1 =
текст извлекается из тегов блока

java.md.string = ** текст разбирается как уценка ** \ n \ n

… сброс синтаксического анализа до формата свойств Java по умолчанию для определенных ключей.

 # smartling.string_format_paths = @default: * 
java.html.string1 =
анализируется вся строка

… полностью сбросить синтаксический анализ до формата свойств Java по умолчанию

 # smartling.string_format_paths = none 
java.html.string1 =
анализируется вся строка

формат_загрузки
Значения НЕТ (по умолчанию) ИЛИ ESCAPE_UNICODE
Описание ESCAPE_UNICODE указывает, что все символы, отличные от Latin1 (не в диапазоне 0000–007F юникода) после этого комментария, должны быть экранированы выражением экранирования \ uXXXX в процессе загрузки файла.
Примеры

# smartling.download_format = ESCAPE_UNICODE

Здравствуйте? будет преобразован как Hello \ u1D25 при загрузке.

sltrans
Значения перевести ИЛИ notranslate
Описание Используйте эту директиву, чтобы включить или отключить обработку строк перевода в файле.Вы должны снова включить перевод после строк, которые хотите исключить.
Примеры

# smartling.sltrans = notranslate

Строки под этой директивой будут захвачены как строки, но исключены из перевода.

# smartling.sltrans = перевести

Строки под этой директивой будут переведены.

Была ли эта статья полезной?

mattdsteele / java-properties: Узловой модуль для чтения и интерполяции Java.файлы свойств

GitHub — mattdsteele / java-properties: модуль узла для чтения и интерполяции файлов Java .properties

Модуль узла для чтения и интерполяции файлов Java .properties

Файлы

Постоянная ссылка Не удалось загрузить последнюю информацию о фиксации.

Тип

Имя

Последнее сообщение фиксации

Время фиксации

Читать Java.файлы свойств. Поддерживает динамическое добавление некоторых файлов и значения ключа массива (один и тот же ключ несколько раз)

Начало работы

Установите модуль с помощью: npm install java-properties

Документация

 var properties = require ('java-properties');

    // Ссылка на файл свойств
    var values ​​= properties.of ('values.properties');

    // Считываем значение из файла свойств
    values.get ('ключ'); // возвращает значение a.key

    // Добавляем дополнительные свойства файла
    значения.добавить ('другой файл.properties');

    // Удаляем все значения
    values.reset ();
    ...
    // возвращает значение ключа 'defaultValue', если ключ не найден
    values.get ('a.key', 'defaultValue');
    ...
    // возвращает значение a.int.key как int или 18
    values.getInt ('a.int.key', 18);
    ...
    // возвращает значение a.float.key в виде числа с плавающей запятой или 18,23
    values.getFloat ('a.float.key', 18.23);
    ...
    // возвращает значение a.bool.key как логическое. Разбирайте истину или ложь с любым регистром или 0 или 1
    значения.getBoolean ('a.bool.key', правда);
    ...
    // возвращает все ключи
    values.getKeys ();
    ...
    // добавляет еще один файл в список свойств
    values.addFile ('anotherFile.properties');
    ...
    // очищаем ранее загруженные ключи
    values.reset ();
    ...
    [- файл .properties
    an.array.key = значение1
    an.array.key = значение2
    ]
    values.get ('an.array.key'); // возвращает [значение1, значение2]

    // Множественные контексты
    var myFile = новый файл свойств (
        'example.properties',
        'arrayExample.характеристики');
    myFile.get ('arrayKey');

    var myOtherFile = новый файл свойств ();
    myOtherFile.addFile ('example.properties');
    myOtherFile.addFile ('example2.properties'); 

Содействие

Вместо формального руководства по стилю позаботьтесь о сохранении существующего стиля кодирования. Добавьте модульные тесты для любых новых или измененных функций. Линт и проверьте свой код.

История выпусков

  • 0.1.0 Начальная фиксация
  • 0.1.5 Поддержка пустых строк
  • 0.1.6 Новый API: getKeys
  • 0.1.7 Новые API: addFile и сбросить
  • 0.1.8 Добавить ключ массива (один и тот же ключ много раз в файлах)
  • 0.2.0 Оберните объекты в класс, чтобы иметь возможность иметь несколько рабочих контекстов
  • 0.2.1 Добавьте значение по умолчанию для получения метода. Добавьте getInt и getFloat, чтобы получить целое число или значение с плавающей запятой
  • 0.2.2 Добавьте метод getBoolean, чтобы получить значение как логическое. Допустимые значения: истина, ИСТИНА, ложь, ЛОЖЬ, 0, 1
  • .
  • 0.2.3 Добавление метода
  • getMatchingKeys
  • 0.2.4 Разрешить многострочные свойства
  • 0.2.5 Рефакторинг, новых функций нет
  • 0.2.6 FIX интерполяция, когда свойство многозначно
  • 0.2.7 Получить только последнее значение для int и boolean в случае многозначного атрибута
  • 0.2.8 FIX unicode \ uxxxx декодирование символов
  • 0.2.9 Разрешить использование нескольких двойных кавычек
  • 0.2.10 исправить ошибку с экранированием: & = (спасибо @Drapegnik)
  • 1.0.0 Переписать как Машинопись.Поддержка только Node 6+

Лицензия

По лицензии MIT.

Около

Модуль узла для чтения и интерполяции файлов Java .properties

Ресурсы

Лицензия

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

Как читать файл свойств в Java | Бхаргав Бачина | Bachina Labs

Есть три способа реализовать чтение файлов в проектах Java, мы увидим все методы. Давайте определим файл с именем application.properties в папке src / main / resources .

InputStream From Classpath

Согласно документации Oracle Здесь, системный ресурс — это ресурс, который либо встроен в систему, либо хранится реализацией хоста, например, в локальной файловой системе. Программы получают доступ к системным ресурсам с помощью методов ClassLoader getSystemResource и getSystemResourceAsStream .

Например, в конкретной реализации поиск системного ресурса может включать поиск записей в CLASSPATH.Методы ClassLoader выполняют поиск файла ресурсов в каждом каталоге, ZIP-файле или JAR-файле в CLASSPATH и, если найдены, возвращают либо InputStream , либо имя ресурса. Если не найден, методы возвращают значение null. Ресурс может быть найден в записи CLASSPATH, отличной от той, в которую был загружен файл класса.

Во-первых, нам нужно определить файл свойств, как показано ниже в разделе / src / main / resources.

заявка.properties

Давайте определим класс с именем ApplicationProperties и загрузим этот файл свойств с помощью ClassLoader и getResourceAsStream. Этот метод вызывает исключение IOEception, если файл не найден. Поскольку мы загружаем этот файл в конструктор, файл свойств загружается в переменную Properties.

ApplicationProperties.java

Давайте протестируем следующий основной класс.

ReadMain.java

Вот результат выполнения вышеупомянутого класса

Выход

FileInputStream

Согласно документам Oracle здесь, A FileInputStream получает входные байты из файла в файловой системе.Какие файлы доступны, зависит от среды хоста.

FileInputStream предназначен для чтения потоков необработанных байтов, таких как данные изображения. Для чтения потоков символов рассмотрите возможность использования FileReader .

Во-первых, нам нужно определить файл свойств с именем file.properties , как показано ниже в разделе src / main / files.

file.properties

Давайте определим класс с именем FileProperties и загрузим этот файл свойств с FileInputStream .Этот метод вызывает исключение FileNotFoundException , если файл не найден. Поскольку мы загружаем этот файл в конструктор, файл свойств загружается в переменную Properties.

FileProperties.java

Давайте протестируем следующий основной класс.

ReadWithFileInputStream.java

Вот результат выполнения вышеупомянутого класса.

вывод

FileReader

FileReader предназначен для чтения потоков символов.Во-первых, нам нужно определить файл свойств с именем db.properties , как показано ниже в разделе src / main / db.

db.properties

Давайте определим класс с именем DBProperties и загрузим этот файл свойств с помощью FileReader . Этот метод вызывает исключение FileNotFoundException , если файл не найден. Поскольку мы загружаем этот файл в конструктор, файл свойств загружается в переменную Properties.

DBProperties.java

Давайте протестируем следующий основной класс.

ReadWithFileReader.java

Вот результат выполнения вышеупомянутого класса.

вывод

Как читать файл свойств в java

package org.arpit.java2blog;

импорт java.io.File;

импорт java.io.FileNotFoundException;

import java.io.IOException;

импорт java.io.InputStream;

импорт java.util.Properties;

/ *

* @author Arpit Mandliya

* /

публичный класс ReadPropertiesFileJavaMain {

публичный статический void main (String args []) выбрасывает IOException {

new

System.out.println («Чтение из файла свойств»);

System.out.println («——————————«);

Свойства prop = rp.readPropertiesFile («/ config.properties»);

System.out.println («хост:» + prop.getProperty («хост»));

System.out.println («имя пользователя:» + prop.getProperty («имя пользователя»));

System.out.println («пароль:» + prop.getProperty («пароль»));

System.out.println («——————————«);

}

общедоступные свойства readPropertiesFile (String fileName) выдает исключение IOException {

InputStream fis = null;

Свойства prop = null;

try {

prop = new Properties ();

fis = это.getClass (). getResourceAsStream (имя_файла);

// создать объект класса свойств

if (fis! = Null) {

// загрузить в него файл свойств

prop.load (fis);

} else {

выбросить новое исключение FileNotFoundException («файл свойств» + имя_файла + «‘не найден в пути к классам»);

}

} catch (FileNotFoundException e) {

e.printStackTrace ();

} catch (IOException e) {

e.printStackTrace ();

} наконец {

fis.close ();

}

обратная стойка;

}

}

Как создать и изменить форму файла свойств Java-программу в текстовом и XML формате

Хотя в большинстве случаев мы создаем и изменяем файл свойств с помощью текста. редактор, такой как блокнот, блокнот или edit-plus. Также можно создавать и редактировать properties из программы на Java.Log4j.properties, который используется для настройки журналирования на основе Log4J в Java и jdbc.properties, который используется для указания конфигурации параметры для базы данных подключение с использованием JDBC — два наиболее распространенных примера файла свойств в Ява. Хотя я не нашел реальной ситуации, когда мне нужно было бы создать properties с помощью программы Java, но всегда полезно знать о возможности, доступные в Java API. В последнем руководстве Java по свойствам у нас есть видел как для чтения значений из файла свойств как в текстовом, так и в XML-формате, и в этой статье мы увидим, как создать файл свойств как в текстовом, так и в XML-формате.


Класс Java API java.util.Properties предоставляет несколько служебных методов store () для хранить свойства в текстовом или xml формате. Store () может быть используется для хранения свойства в текстовом файле свойств, а метод storeToXML () может использоваться для создания файла свойств Java в формате XML.

Программа на Java для создания и хранения свойств в текстовом и XML-формате Как я сказал ранее, java.util.Properties представляет файл свойств в Программа на Java. Он предоставляет методы load () и store () для читать и записывать файлы свойств из файловой системы и в файловую систему.Вот простой пример создания самой программы формы файла свойств Java.

import java.io.FileNotFoundException;
импорт java.io.FileOutputStream;
импорт java.io.IOException;
import java.util.Properties;

/ **
* Программа на Java для создания и изменения файла свойств в текстовом формате и хранение

* имущество в теме. В большинстве случаев мы используем текстовый редактор для создания и редактирования собственности

.

* файл e.грамм. jdbc.properties или log4j.properties, но мы также можем создать свойство

* файл из Программа на Java, как показано в этом примере.

*
* @author Javin Paul
* /
общедоступный класс TextPropertyWriter {

public static void main ( String args []) выбрасывает FileNotFoundException , IOException {

// Создание файлы свойств из программы Java
Свойства props = новый Свойства ();
FileOutputStream fos = новый FileOutputStream («c: / user.свойства «);

props.setProperty (» key1 «, «значение1»);
props.setProperty («ключ2», «значение2»);

// пишущие свойства в файл свойств из Java
props.store (fos, «Свойства файл, созданный программой Java «);

fos.close ();

}
}

Это создаст файл user.properties в C: \. вот как это свойство файл будет выглядеть так:

# Файл свойств, созданный программой Java

# Пн 16 янв 03:00:57 ПТ 2012

ключ2 = значение2

ключ1 = значение1

Вот еще один пример создания файла свойств Java в формате XML из Программа на Java:

импорт java.io.FileNotFoundException;
импорт java.io.FileOutputStream;
импорт java.io.IOException;
import java.util.Properties;

/ **
* Программа на Java для хранения свойств в файле свойств XML. stroeToXML () метод

* java.util.Properties Класс используется для сохранения свойств в файле свойств XML из Java

* программа.

*
* @author Javin Paul
* /
общедоступный класс XmlPropertiesWriter {

public static void main ( String args []) выбрасывает FileNotFoundException , IOException {

// Чтение свойств файлы в примере Java
Свойства props = новый Свойства ();
FileOutputStream fos = новый FileOutputStream («c: / user.xml «);

props.setProperty (» key1 «, «значение1»);
props.setProperty («ключ2», «значение2»);

// пишущие свойства в файл свойств из Java
props.storeToXML (fos, «Свойства файл в формате xml, созданный программой Java «);

fos.close ();


}
}

Выход:

version = «1.0» encoding = «UTF-8» standalone = «no» ?>


Файл свойств в формате xml, созданном программой Java
<запись key = «key2» > значение2
key = «key1» > значение1


Это все о Как создать файл свойств из программы Java или Как изменить свойства из программы Java.Как я уже сказал, почти все время мы используем текст редактор например блокнот или блокнот ++ для редактирования файлов свойств, таких как log4j.properties или jdbc.properties, вы можете также при необходимости отредактируйте их из программы Java. Я лично предпочитаю недвижимость файл в текстовом формате, если количество свойств невелико и основано на XML файл свойств, если файл достаточно большой, например, если у вас есть много свойств для использовать редакторы XML.


Дальнейшее обучение
Углубленное изучение Java: станьте полным Java-инженером!
Master Java Web Services и REST API с Spring Boot
Java Web Fundamentals

Другие руководства по Java XML , которые могут оказаться полезными

Свойства Java — GeoServer 2.20.x Руководство пользователя

Хранилище данных свойств обеспечивает доступ к одному или нескольким типам объектов (слоям), хранящимся в файлах свойств Java; это простые текстовые файлы, хранящиеся в локальной файловой системе. Хранилище данных Properties никогда не предназначалось для поставки с GeoServer. Он возник в учебном пособии по GeoTools, а затем нашел широкое применение разработчиками в автоматизированных тестах, для которых требовалось удобное хранилище небольших фрагментов данных. Он попал в GeoServer по завершении процесса упаковки, был автоматически обнаружен и предложен пользователям через веб-интерфейс.Хранилище данных о свойствах оказалось полезным в учебных пособиях и примерах.

  • Мы не рекомендуем использовать хранилище данных Properties для больших объемов данных с большим количеством элементов или большой геометрией. Его производительность будет ужасной.

  • Для небольших наборов данных, таких как коллекции из нескольких десятков точек, вы можете найти это удовлетворительным. Например, если у вас есть несколько точек, которые вы хотите добавить в качестве дополнительного уровня, и нет удобной базы данных, в которой они хранятся, хранилище данных Properties предоставляет простые средства их доставки.

  • Изменения в файле свойств немедленно отражаются в ответах GeoServer. Нет необходимости воссоздавать хранилище данных, пока не будет изменена первая строка файла свойств или файлы свойств не будут добавлены или удалены.

Добавление хранилища данных свойств

По умолчанию при создании нового хранилища данных в списке «Источники векторных данных» будет опция «Свойства».

Свойства в списке хранилищ векторных данных

Настройка хранилища данных свойств

Настройка хранилища данных Properties

Опция

Описание

Рабочее пространство

Задает префикс пространства имен типов объектов (слоев) и их свойств

Имя источника данных

Уникальный идентификатор, позволяющий отличить это хранилище данных

Описание

Дополнительный текст с подробным описанием хранилища данных

Включено

Функции будут доставлены, только если эта опция отмечена

каталог

Путь файловой системы к каталогу, содержащему один или несколько файлов свойств, например / usr / local / geoserver / data / ex

Каждый файл свойств TYPENAME.properties в назначенном каталоге обслуживается как тип объекта TYPENAME (имя файла без .properties ) в пространстве имен хранилища данных.

Прежде чем можно будет использовать тип объекта (слой), вы должны отредактировать его, чтобы убедиться, что его ограничивающая рамка и другие метаданные настроены.

Формат файла свойств

Формат файла свойств — это подмножество формата свойств Java: список строк в форме КЛЮЧ = ЗНАЧЕНИЕ .

В этом примере station.properties определяет четыре объекта типа объекта (слоя) станций :

 _ = id: целое число, код: строка, имя: строка, расположение: геометрия: srid = 4326
station.27 = 27 | ALIC | Алис-Спрингс | ТОЧКА (133,8855 -23,6701)
станции 4 = 4 | NORF | Остров Норфолк | ТОЧКА (167,9388 -29,0434)
станций. 12 = 12 | COCO | Cocos | POINT (96,8339 -12,1883)
станции. 31 = 31 | ЭЛБИ | Олбани | ТОЧКА (117,8102-34,9502)
 
  • Пустые строки в файле не допускаются.

  • Первая строка файла свойств начинается с _ = и определяет информацию о типе, необходимую для интерпретации следующих строк.

    • Значения, разделенные запятыми, имеют вид ИМЯ: ТИП

    • Имена — это имя свойства, которое используется для кодирования свойства в ответах WFS.

    • Типы включают Целое число , String , Float и Геометрия

    • Геометрия может иметь дополнительный суффикс : srid = XXXX , который определяет пространственную справочную систему ее числовым кодом EPSG.Обратите внимание, что геометрические формы, определенные таким образом, расположены в порядке долготы / широты.

  • Последующие строки определяют объекты, по одному на строку.

    • Ключ перед = — это идентификатор функции ( fid или gml: id в ответах WFS). Каждый должен быть NCName.

    • Данные функции следуют за = , разделенными вертикальными полосами ( | ). Типы данных должны соответствовать объявлению в первой строке.

    • Оставьте поле пустым, если хотите, чтобы оно было пустым; в этом случае свойство игнорируется.

Обратите внимание, что в этом примере srid = 4326 устанавливает систему пространственной привязки (SRS) на EPSG: 4326 , которая по соглашению находится в порядке долготы / широты, когда упоминается в краткой форме. Если вы запросите эти функции в GML 3, вы увидите, что GeoServer правильно переводит геометрию в форму URN SRS urn: x-ogc: def: crs: EPSG: 4326 в форме широты / долготы.См. Страницу настроек WFS для получения дополнительной информации о вариантах порядка оси SRS.

Учебное пособие по модулю свойств системы

NetBeans

Это руководство поможет вам понять следующее:

  • как добавить иерархию узлов в окно служб

  • как переименовывать и удалять узлы

  • как отображать подузлы

  • как изменить список узлов

  • как создать лист свойств

  • как назначать свойства

  • как выполнять другие общие задачи

Работа с этим примером важна, поскольку API-интерфейс узлов NetBeans является одним из наиболее распространенных API-интерфейсов и отражает информацию, которая существует независимо от узлов.Вы взаимодействуете через интерфейс с этой живой информацией.

Перед тем, как приступить к написанию модуля, вы должны убедиться, что у вас есть все необходимое программное обеспечение. Кроме того, вы можете поиграть с образцом, прежде чем создавать его самостоятельно. Знакомство с образцом позволит вам узнать, что вас ждет в оставшейся части этого урока!

Установка образца

В этом разделе мы загружаем и устанавливаем образец, чтобы мы могли ознакомиться с ним, прежде чем воссоздавать его самостоятельно.

  1. В среде IDE выберите «Файл»> «Открыть проект» и перейдите к папке, содержащей распакованный файл. Откройте проект модуля. Должно получиться так:

  1. Щелкните правой кнопкой мыши узел проекта и выберите «Установить / перезагрузить на целевой платформе». Целевая платформа открывается, и модуль устанавливается.

Знакомство с образцом

В этом разделе мы рассмотрим функциональные возможности, предоставляемые модулем, с точки зрения конечного пользователя.Как только мы подробно узнаем, что будет предоставлять модуль, мы сможем создать его с нуля.

  1. Откройте окно «Службы» (Ctrl-5) и обратите внимание, что у вас есть новый узел с большим количеством (~ 50) подузлов, каждый из которых помечен в соответствии с ключом для определенных свойств Java:

Пункты контекстного меню появляются при щелчке правой кнопкой мыши по основному узлу и подузлам. Для подузлов общие свойства среды выполнения Java используются для настройки основных механизмов, таких как пути поиска шрифтов, расположение виртуальной машины Java (JVM), локаль по умолчанию и т. Д.Обычно это строковые ключи, подобные name.name.name , и соответствующее строковое значение. Значения можно запросить или установить из языка Java. Кроме того, их можно использовать для установки значений по умолчанию при запуске JVM. Когда узел «Свойства системы» расширен, он будет отображать по одному узлу для каждого из ключей, каждый из которых помечен в соответствии с ключом. Например:

  • Значение java.vm.vendor может отображать, например, значение Sun Microsystems, Inc.

  • Значение path.separator может отображать точку с запятой, в зависимости от вашей конфигурации.

  • Значение user.language может отображать значение English, в зависимости от вашей конфигурации.

  1. Поиграйте с образцом:

    • Показать страницу свойств. Щелкните правой кнопкой мыши подузел и выберите «Свойства». На странице свойств отображается одна вкладка «Свойства», содержащая два свойства.Первое свойство помечено как имя и дает то же имя, что и узел (ключ), а другое помечено как значение и отображает строковое значение свойства.

    • Переименовать собственность. Щелкните подузел, а затем щелкните его еще раз. Это позволяет вам переименовать ключ на месте, сохранив при этом то же значение. Также можно щелкнуть свойство «Имя» на панели свойств или щелкнуть правой кнопкой мыши подузел и выбрать «Переименовать».

    • Измените значение. Щелкните вкладку «Значение» на странице свойств и введите новое значение.Это сбрасывает системное свойство на введенное значение.

    • Добавить недвижимость. Щелкните правой кнопкой мыши главный узел «Свойства системы» и выберите «Добавить свойство системы». Это позволяет вам добавить в список новое системное свойство.

    • Удалить свойство. Выберите свойство и нажмите Удалить. Это удаляет свойство.

    • Обновить список. Щелкните правой кнопкой мыши главный узел «Свойства системы» и выберите «Обновить». Это побуждает модуль перепроверить значения, обновляя список по мере необходимости.

Знакомство с источниками

Образец свойств системы состоит из основных и вспомогательных файлов.

Классы Java представлены в алфавитном порядке ниже:

Файл Описание

AllPropsChildren.java

Этот дочерний объект отвечает за отслеживание списка узлов под узлом «Свойства системы».При первом запросе списка он извлекает все системные свойства и просит реализацию узла отслеживать все имена системных свойств. Интерфейс для этого — класс Children.

AllPropsNode.java

Этот узел указывает, какие дочерние узлы будут под ним, и просит использовать AllPropsChildren для отслеживания списка дочерних узлов. Модуль заботится о таких вещах, как его контекстное меню.

OnePropNode.Java

Это узел, представляющий отдельное свойство, и является абстрактным узлом. Его конструктор требует, чтобы пользователь предоставил ключ в виде строки. Для каждого имени свойства системы используется OnePropNode для его отображения. Когда пользователь разворачивает узел свойств системы, он создает список ключей, а затем создает соответствующее количество узлов OnePropNodes. Каждый узел OnePropNode отображает один ключ и не взаимодействует напрямую со своим родительским узлом — его знания ограничены одним системным свойством и методами работы с ним, а также уведомлением PropertiesNotifier о любых изменениях.Такой дизайн упрощает повторное использование таких узлов, в том числе их размещение в других контекстах.

PropertiesNotifier.java

Управляет событиями маршрутизации при любых изменениях, включая добавление, удаление или переименование свойства, или при изменении значения свойства.

RefreshPropsAction.java

Это действие отображается во всплывающем меню в разделе «Свойства системы» с меткой «Обновить».Он вызывает обновление, обновляя отображение информации на основе текущего состояния свойств системы.

* Вспомогательные файлы. Вспомогательные файлы модуля находятся в пакете org.myorg.systemproperties и в узле «Важные файлы» (выбранном на рисунке ниже):

Вспомогательные файлы в пакете org.myorg.systemproperties представлены в алфавитном порядке ниже:

Файл Описание

allPropsIcon.gif

Значок для узла «Свойства системы».

Набор. Свойств

Это стандартный файл свойств Java, в котором используется синтаксис Ключ = Значение . Ключи — это кодовые имена для вещей, которые появляются в исходном коде, со значениями, обозначающими те вещи, которые будут отображаться пользователю. Этот файл пригодится для локализации. Например, создав файл свойств, такой как Bundle_ja.properties и заполнив все значения японским языком, этот модуль будет автоматически отображать все на японском языке, если пользователь запускает IDE в японском режиме.

layer.xml

Регистрирует AllPropsNode.java как узел в окне «Службы».

onePropIcon.gif

Значок подузлов.

Файлы в узле «Важные файлы» представлены в том порядке, в котором они появляются в окне «Проекты»:

Файл Описание

Манифест модуля

Объявляет проект как модуль.

Скрипт сборки

Содержит целевые объекты Ant для сборки проекта.

Метаданные проекта

Содержит метаданные проекта, такие как зависимости, для проекта.

Свойства проекта

Содержит свойства проекта.

Конфигурация платформы NetBeans

Содержит свойства платформы.

Конфигурация платформы NetBeans для каждого пользователя

Содержит пользовательские свойства.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *