Java 특성 파일로 저장하고 나중에로드하고 반복하려는 구성 값의 키 / 값 쌍 목록이 있습니다.
질문 :
- 파일을로드 할 클래스와 동일한 패키지에 파일을 저장해야합니까, 아니면 파일을 배치해야하는 특정 위치가 있습니까?
- 파일이 특정 확장자로 끝나야합니까, 아니면
.txt
괜찮습니까? - 코드에서 파일을로드하는 방법
- 그리고 내부의 값을 어떻게 반복 할 수 있습니까?
답변
InputStream을 속성에 전달할 수 있으므로 파일이 거의 모든 곳에서 호출 될 수 있습니다.
Properties properties = new Properties();
try {
properties.load(new FileInputStream("path/filename"));
} catch (IOException e) {
...
}
다음과 같이 반복하십시오.
for(String key : properties.stringPropertyNames()) {
String value = properties.getProperty(key);
System.out.println(key + " => " + value);
}
답변
-
원하는 위치 에 파일을 저장할 수 있습니다 . jar 파일에 보관하려면 사용
Class.getResourceAsStream()
하거나ClassLoader.getResourceAsStream()
액세스해야합니다. 파일 시스템에 있으면 약간 더 쉽습니다. -
내 경험에서 .properties가 더 일반적이지만 모든 확장은 괜찮습니다.
-
사용하여 파일을로드
Properties.load
전달,InputStream
또는StreamReader
자바 6을 사용하는 경우 당신이 경우 ( 하는 자바 6을 사용하여, 나는 아마 UTF-8과 사용하십시오Reader
스트림에 대한 기본 설정 대신 ISO-8859-1 인코딩. ) -
그것은을 반복 처리 당신은 정상을 반복 원하는만큼
Hashtable
(이Properties
사용 예에서 파생)keySet()
. 또는에서 반환 한 열거 형을 사용할 수 있습니다propertyNames()
.
답변
속성 파일을 Foo 클래스와 동일한 패키지에 넣으면 쉽게로드 할 수 있습니다
new Properties().load(Foo.class.getResourceAsStream("file.properties"))
속성이 해시 테이블을 확장하면 해시 테이블에서와 같은 방식으로 값을 반복 할 수 있습니다.
* .properties 확장자를 사용하면 편집기 지원을받을 수 있습니다. 예를 들어 Eclipse에는 특성 파일 편집기가 있습니다.
답변
properties
파일 을 만들고 읽는 방법에는 여러 가지가 있습니다 .
- 파일을 동일한 패키지에 저장하십시오.
.properties
확장 프로그램을 추천 하지만 자신의 것을 선택할 수 있습니다.- 사용은에있는 클래스 논제
java.util
패키지 =>Properties
,ListResourceBundle
,ResourceBundle
클래스. - 속성을 읽으려면 반복자 또는 열거자를 사용하거나 직접 메소드
Properties
또는java.lang.System
클래스를 사용하십시오.
ResourceBundle
수업:
ResourceBundle rb = ResourceBundle.getBundle("prop"); // prop.properties
System.out.println(rb.getString("key"));
Properties
수업:
Properties ps = new Properties();
ps.Load(new java.io.FileInputStream("my.properties"));
답변
속성 파일이로드됩니다.
Properties prop = new Properties();
InputStream stream = ...; //the stream to the file
try {
prop.load(stream);
} finally {
stream.close();
}
모든 구성 파일이있는 디렉토리에 .properties 파일을 저장하는 데 사용하지만 액세스하는 클래스와 함께 사용하지는 않지만 여기에는 제한이 없습니다.
이름을 … 나는 자세한 정보를 위해 .properties를 사용하고 싶지 않다면 .properties로 이름을 지정해야한다고 생각하지 않습니다.
답변
예:
Properties pro = new Properties();
FileInputStream in = new FileInputStream("D:/prop/prop.properties");
pro.load(in);
String temp1[];
String temp2[];
// getting values from property file
String username = pro.getProperty("usernamev3");//key value in prop file
String password = pro.getProperty("passwordv3");//eg. username="zub"
String delimiter = ","; //password="abc"
temp1=username.split(delimiter);
temp2=password.split(delimiter);
답변
속성이 레거시가되었습니다. 환경 설정 클래스는 속성보다 선호됩니다.
기본 설정 데이터의 계층 적 콜렉션에있는 노드입니다. 이 클래스를 통해 응용 프로그램은 사용자 및 시스템 환경 설정 및 구성 데이터를 저장하고 검색 할 수 있습니다. 이 데이터는 구현 종속 백업 저장소에 지속적으로 저장됩니다. 일반적인 구현에는 플랫 파일, OS 특정 레지스트리, 디렉토리 서버 및 SQL 데이터베이스가 포함됩니다. 이 클래스의 사용자는 백업 저장소의 세부 사항에 대해 걱정할 필요가 없습니다.
문자열 기반 키-값 쌍인 속성과 달리이 Preferences
클래스에는 기본 설정 데이터 저장소에서 기본 데이터를 가져오고 넣는 데 사용되는 몇 가지 메소드가 있습니다. 다음 유형의 데이터 만 사용할 수 있습니다.
- 끈
- 부울
- 더블
- 흙손
- int
- 긴
- 바이트 배열
특성 파일을로드하려면 절대 경로를 제공하거나 getResourceAsStream()
특성 파일이 클래스 경로에있는 경우 사용 하십시오.
package com.mypack.test;
import java.io.*;
import java.util.*;
import java.util.prefs.Preferences;
public class PreferencesExample {
public static void main(String args[]) throws FileNotFoundException {
Preferences ps = Preferences.userNodeForPackage(PreferencesExample.class);
// Load file object
File fileObj = new File("d:\\data.xml");
try {
FileInputStream fis = new FileInputStream(fileObj);
ps.importPreferences(fis);
System.out.println("Prefereces:"+ps);
System.out.println("Get property1:"+ps.getInt("property1",10));
} catch (Exception err) {
err.printStackTrace();
}
}
}
xml 파일 :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE preferences SYSTEM 'http://java.sun.com/dtd/preferences.dtd'>
<preferences EXTERNAL_XML_VERSION="1.0">
<root type="user">
<map />
<node name="com">
<map />
<node name="mypack">
<map />
<node name="test">
<map>
<entry key="property1" value="80" />
<entry key="property2" value="Red" />
</map>
</node>
</node>
</node>
</root>
</preferences>
환경 설정 저장소의 내부 에서이 기사 를 살펴보십시오.