2016-08-18 7 views
0

load(new FileReader())メソッドを使用して、javaのPropertiesオブジェクトにプロパティをロードしようとしています。すべてのプロパティはロードされますが、プロパティはコメント付きのもの(#)で始まります。これらのコメント付きプロパティをJava APIを使用してPropertiesオブジェクトにロードする方法手動でのみ?JavaのPropertiesオブジェクトにコメント付きのプロパティをロード

ありがとうございました。

答えて

-1

java.util.Propertiesクラスを拡張してこの特殊性をオーバーライドすることを提案できますが、そのために設計されていません。多くのものはハードコードされており、上書きできません。そのため、ほとんど変更を加えずにメソッドのコピーペースト全体を行う必要があります。

if (isNewLine) { 
       isNewLine = false; 
       if (c == '#' || c == '!') { 
        isCommentLine = true; 
        continue; 
       } 
} 

#がハードコードさ: はたとえば、一度に、内部で使用されるLineReaderは、ロード時にプロパティファイルことありません。

編集

もう一つの方法は、必要に応じてByteArrayOutputStreamで、修正、それは#であれば最初の文字を削除し、読み取りラインを書き、行ごとにproprtiesファイルを読み取ることができます。 ByteArrayOutputStream.toByteArray()からByteArrayInputStreamのプロパティを読み込むことができます。

ここユニットテストで可能な実装:ユニットテスト

dog=woof 
#cat=meow 

:入力myProp.properties Asを

@Test 
public void loadAllPropsIncludingCommented() throws Exception { 

    // check properties commented not retrieved 
    Properties properties = new Properties(); 
    properties.load(LoadCommentedProp.class.getResourceAsStream("/myProp.properties")); 
    Assert.assertEquals("woof", properties.get("dog")); 
    Assert.assertNull(properties.get("cat")); 

    // action 
    BufferedReader bufferedIs = new BufferedReader(new FileReader(LoadCommentedProp.class.getResource("/myProp.properties").getFile())); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    String currentLine = null; 
    while ((currentLine = bufferedIs.readLine()) != null) { 
     currentLine = currentLine.replaceFirst("^(#)+", ""); 
     out.write((currentLine + "\n").getBytes()); 
    } 
    bufferedIs.close(); 
    out.close(); 

    // assertion 
    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); 
    properties = new Properties(); 
    properties.load(in); 
    Assert.assertEquals("woof", properties.get("dog")); 
    Assert.assertEquals("meow", properties.get("cat")); 
} 
関連する問題