2017-04-05 3 views
0

특수 문자 파일을 저장하는 방법 : 나는 파일을 처리 할 때제대로 속성이 같은 속성 파일이

[flags] 
prop1=value 
prop2=value 
[patterns] 
prop3=#.00 
prop4=###,##0.00 
[other] 
prop5=value 

뿐만 아니라 파운드 기호가 이스케이프 (#)를하지만, 내 모든 속성은 고장난. 내가 props.setProperty()를 호출 한 후 등록 정보 파일을 저장하는 또 다른 방법을 모르기 때문에

Properties props = new Properties(); 

FileInputStream in = null; 
try 
{ 
    in = new FileInputStream(PROP_FILE); 
    Reader reader = new InputStreamReader(in, StandardCharsets.UTF_8); 
    props.load(reader); 
} 
catch (IOException e) 
{ 
    // log exception 
} 
finally 
{ 
    if (in != null) 
    { 
     try 
     { 
     in.close(); 
     } 
     catch (IOException e) 
     { 
     // log exception 
     } 
    } 
} 

props.setProperty("prop5", "otherValue"); 
try 
{ 
    OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream(INI_FILE), StandardCharsets.UTF_8); 
    props.store(w, null); 
} 
catch (IOException e) 
{ 
    // log exception 
} 

내가 props.store()을 사용하고 있습니다 :

내 코드는 다음과 같은 것입니다.

+1

잘못 속성 파일을 사용하려고하는 것 같습니다. 그것들은 주문할 수있는 것이 아니며, 필요할 때 물건이 빠져 나갈 것입니다. 그것은 당신이 정말로 Windows "ini"파일과 같은 것을 원한다고 들립니다 ... –

+0

@JonSkeet, Thank you! 그것이 바로 그 것이다. 몇 년 전, 저는 이것을하기 위해 ini4j를 사용했습니다. 나는 그것을 조사 할 것이다. 다시 고마워! – hfontanez

답변

0

Jon Skeet은 자바 등록 정보가 이런 방식으로 사용되지 않는다는 점을 지적했으며, Windows 스타일의 .ini 파일이 필요하다는 점을 지적했습니다. 이 제안으로 인해 나는 수년 전에 ini4j을 사용 했었고 이것이 내가이 경우에 사용해야했던 것임을 기억합니다.

이 솔루션은 매우 간단합니다 :

try 
{ 
    Wini ini = new Wini(new File(PROP_FILE)); 
    ini.put("others", "prop5", value); // "others" is the section, "prop5" the key, and "value" is self-explanatory. 
    ini.store(); // INI file is saved 
} 
catch (IOException e) 
{ 
    // log problem... do whatever! 
} 

, 내 속성 섹션에 보존하고, 속성의 순서가 유지되며, (# 같은) 특수 문자 이스케이프되지 않은 저장 ini4j를 사용하여; 모든 문제를 해결합니다.