Java에서 속성 파일 읽기
속성 파일을 읽으려고 하는 다음 코드가 있습니다.
Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);
마지막 줄에 예외가 있어요.구체적으로는:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)
고마워, 니코스
예외에 , 「」는 「 」InputStream
null 입니다 수 을 의미합니다.myProp.properties 。이 경우 슬래시가 필요합니다.
InputStream stream = loader.getResourceAsStream("/myProp.properties");
수 .
http://www.mkyong.com/java/java-properties-file-examples/httpwww.mkyong.com/java//
Properties prop = new Properties();
try {
//load a properties file from class path, inside static method
prop.load(App.class.getClassLoader().getResourceAsStream("config.properties"));
//get the property value and print it out
System.out.println(prop.getProperty("database"));
System.out.println(prop.getProperty("dbuser"));
System.out.println(prop.getProperty("dbpassword"));
}
catch (IOException ex) {
ex.printStackTrace();
}
하시면 됩니다.ResourceBundle
fileclass를 합니다.
ResourceBundle rb = ResourceBundle.getBundle("myProp.properties");
Properties prop = new Properties();
try {
prop.load(new FileInputStream("conf/filename.properties"));
} catch (IOException e) {
e.printStackTrace();
}
conf/filename.properties
dir를 기반으로 합니다.
이 키워드는 다음과 같이 사용할 수 없습니다.
props.load(this.getClass().getResourceAsStream("myProps.properties"));
를 참조해 주세요.
가장 좋은 방법은 다음과 같은 애플리케이션 컨텍스트를 파악하는 것입니다.
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/app-context.xml");
클래스 경로에서 리소스 파일을 로드할 수 있습니다.
//load a properties file from class path, inside static method
prop.load(context.getClassLoader().getResourceAsStream("config.properties"));
이는 정적 컨텍스트와 비 정적 컨텍스트 모두에서 작동하며, 가장 좋은 점은 이 속성 파일이 응용 프로그램의 클래스 경로에 포함된 패키지/폴더에 있을 수 있다는 것입니다.
파일은 다음과 같이 사용할 수 있습니다.com/example/foo/myProps.properties
클래스 패스로. 해서 해 주세요
props.load(this.getClass().getResourceAsStream("myProps.properties"));
config.properties가 src/main/resource 디렉토리에 없고 프로젝트의 루트 디렉토리에 있는 경우 다음과 같은 작업을 수행해야 합니다.
Properties prop = new Properties();
File configFile = new File(myProp.properties);
InputStream stream = new FileInputStream(configFile);
prop.load(stream);
그 질문은 오래된 것이군요.만약 누군가가 미래에 이것을 우연히 발견하게 된다면, 저는 이것이 하나의 간단한 방법이라고 생각합니다.프로젝트 폴더에 속성 파일을 보관합니다.
FileReader reader = new FileReader("Config.properties");
Properties prop = new Properties();
prop.load(reader);
파일 이름이 올바르고 파일이 실제로 클래스 경로에 있는지 확인하십시오. getResourceAsStream()
이 경우 마지막 행이 예외를 발생시키지 않을 경우 null이 반환됩니다.
경우 myProp.properties를 합니다./myProp.properties
★★★★★★ 。
java.io 를 사용할 수 있습니다.다음과 같이 InputStream을 사용하여 파일을 읽습니다.
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(myProps.properties);
「」가 되어 있는 .loader.getResourceAsStream("myPackage/myProp.properties")
사용해야 합니다.
의 ★★★'/'
함께 사용할 수 없습니다ClassLoader.getResourceAsStream(String)
★★★★★★ 。
'하다'를 .Class.getResourceAsStream(String)
" " " 를 사용합니다.'/'
패스가 절대인지 클래스 위치에 상대적인지를 판별합니다.
예:
myClass.class.getResourceAsStream("myProp.properties")
myClass.class.getResourceAsStream("/myPackage/myProp.properties")
속성 파일 경로와 Java 클래스 경로가 동일한 경우 이 작업을 수행해야 합니다.
예를 들어 다음과 같습니다.
src/myPackage/MyClass.java
src/myPackage/MyFile.properties
Properties prop = new Properties();
InputStream stream = MyClass.class.getResourceAsStream("MyFile.properties");
prop.load(stream);
여기에서는 파일 입력 스트림을 인스턴스화하지만 스트림을 나중에 닫기 위해 입력 스트림을 참조하지 않는 위험한 방법을 설명합니다.이로 인해 입력 스트림이 행업하여 메모리 누수가 발생합니다.속성을 올바르게 로드하는 방법은 다음과 같습니다.
Properties prop = new Properties();
try(InputStream fis = new FileInputStream("myProp.properties")) {
prop.load(fis);
}
catch(Exception e) {
System.out.println("Unable to find the specified properties file");
e.printStackTrace();
return;
}
에서 파일 입력 스트림을 인스턴스화하는 것에 주의해 주세요.try-with-resources
block. a부터FileInputStream
자동 로스가 가능하므로 다음 시간 후에 자동으로 닫힙니다.try-with-resources
블록이 종료됩니다.심플을 사용하고 싶은 경우try
블록, 다음을 사용하여 명시적으로 닫아야 합니다.fis.close();
에서finally
차단합니다.
현재 답변 중 다음 답변은 없습니다.InputStream
닫힘(파일 기술자가 누출됨) 및/또는 처리하지 않음.getResourceAsStream()
리소스를 찾을 수 없을 때 null을 반환한다(이것에 의해,NullPointerException
혼란스러운 메시지와 함께"inStream parameter is null"
). 다음과 같은 것이 필요합니다.
String propertiesFilename = "server.properties";
Properties prop = new Properties();
try (var inputStream = getClass().getClassLoader().getResourceAsStream(propertiesFilename)) {
if (inputStream == null) {
throw new FileNotFoundException(propertiesFilename);
}
prop.load(inputStream);
} catch (IOException e) {
throw new RuntimeException(
"Could not read " + propertiesFilename + " resource file: " + e);
}
이전 솔루션에서는 상태가 아닌 좋은 방법은 속성, 특히 빌드 플러그인을 사용하여 컴파일 시 생성된 속성 파일을 전달하는 것입니다.PropertySourcesPlaceholderConfigr을 사용하는 것입니다.
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
PropertySourcesPlaceholderConfigurer propsConfig
= new PropertySourcesPlaceholderConfigurer();
propsConfig.setLocation(new ClassPathResource("myProp.properties"));
propsConfig.setIgnoreResourceNotFound(true);
propsConfig.setIgnoreUnresolvablePlaceholders(true);
return propsConfig;
}
IOC의 재산에 접속할 수 있습니다.
@Value("${your.desired.property.pointer}")
private String value;
원래 순서가 있는 읽기 속성 파일의 경우:
File file = new File("../config/edc.properties");
PropertiesConfiguration config = new PropertiesConfiguration();
PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(config);
layout.load(new InputStreamReader(new FileInputStream(file)));
for(Object propKey : layout.getKeys()){
PropertiesConfiguration propval = layout.getConfiguration();
String value = propval.getProperty((String) propKey).toString();
out.print("Current Key:" + propkey + "Current Value:" + propval + "<br>");
}
다음과 같이 src에서 시작하는 경로를 지정합니다.
src/main/resources/myprop.proper
언급URL : https://stackoverflow.com/questions/8285595/reading-properties-file-in-java
'source' 카테고리의 다른 글
JSP/Java에서 전체 부품과 부분 부품을 더블에서 가져오려면 어떻게 해야 합니까? (0) | 2022.09.12 |
---|---|
python은 파일에 얼마나 자주 플러시됩니까? (0) | 2022.09.12 |
쉼표로 구분된 문자열을 배열로 분할하시겠습니까? (0) | 2022.09.12 |
배열의 indexOf 함수와 findIndex 함수의 차이 (0) | 2022.09.11 |
쿼리를 통해 MySQL에서 데이터베이스 구조를 가져오는 방법 (0) | 2022.09.11 |