2017-09-29 15 views
0

プロパティファイルに重複したプロパティが含まれている場合に例外をスローするにはどうすればよいですか?プロパティファイルにプロパティが重複している場合に例外をスローする

# Properties-file 

directory=D:\\media\\D-Downloads\\Errorfile\\TEST_A 
directory=D:\\media\\D-Downloads\\Errorfile\\TEST_B 
#directory=D:\\media\\D-Downloads\\Errorfile\\TEST_C 
+1

[例外クラスの作成](https://docs.oracle.com/javase/tutorial/essential/exceptions/creating.html)を試してください – user2023608

+0

ファイルをどのように解析していますか? – shmosel

+0

私はあなたの質問が何であるか完全にはわかりません。新しい例外を作成する方法はありますか?それはどのように重複のプロパティファイルをチェックするか?それはあなたの質問がはるかに広いです。 –

答えて

2

私はあなたがProperties.load()のようなものを使用してファイルを読んでいるとします は、ここでは、このような状況を証明する一例です。それはput(key, value)を使用してパラメータを内部的に設定します。そのメソッドをオーバーライドして、たとえば次のような目的の動作を得ることができます。

new Properties() { 
    @Override 
    public synchronized Object put(Object key, Object value) { 
     if (get(key) != null) { 
      throw new IllegalArgumentException(key + " already present."); 
     } 
     return super.put(key, value); 
    } 
}.load(...); 

EDIT:

はOPのコードにこれを統合:

File propertiesFile = new File("D:/media/myProperties.properties"); 
Properties properties = new Properties() { 
    @Override 
    public synchronized Object put(Object key, Object value) { 
     if (get(key) != null) { 
      // or some other RuntimeException you like better... 
      throw new IllegalArgumentException(key + " already present."); 
     } 
     return super.put(key, value); 
    } 
} 
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(propertiesFile))) { 
    properties.load(bis); 

} catch (IllegalArgumentException ex) { 
    // 
} 

ところで、なぜあなたは、例外をキャッチしたいですか?私はその設定が壊れている(おそらくイベントを記録するトップレベルにキャッチしている)場合は、プログラムを続行しないだろう。しかし、例外処理は、別のトピックです...

(EDIT:私の元のコードのsamlesが、私はそれらを修正し、コンパイルできませんでした)

+0

VとKをある型に解決することはできません。あなたが正しいです、彼らが同じ名前の2つ以上のパラメータである場合、最高のことは、プログラムを停止することです。私は同じ名前の2つのパラメータであり、エラーメッセージを投げることができるときに、私はその瞬間を捕まえることができます。 – Toti

+0

私はコードを書くことができ、IDEでそれをチェックしないと思うときに起こります:-(。Eclipseで確認した後に私の答えを編集しました。 –

+0

ああ、うまくいきます。ありがとう、ラルフ:-)プロパティファイルに2つの同じパラメータ名が含まれていると、エラーメッセージが表示されることがあります。 – Toti

0

ラルフKleberhoffの答えが正解です。 しかし、私は匿名のクラスを使用しません。 ので、私はPropertiesを拡張するクラスを作成し、putメソッドはPropertiesが延びHashtableクラスからのものであることラルフ

注意が行ったようにputをオーバーライドします 、あなたは複数回、この機能を使用したいと思わ。ここで

は(私はそれをコンパイルしようとしませんでした)の例である:ここでは

public class UniqueProperties 
extends 
    Properties 
{ 
    @Override 
    public synchronized String put(String key, String value) 
    { 
     if (get(key) != null) 
     { 
      throw new IllegalArgumentException(key + " already present."); 
     } 

     super.put(key, value); 
    } 
} 
0

は、私はプロパティをロードしています方法です:どのように私はあなたのコードを適応させることができ@Ralf

 File propertiesFile = new File("D:/media/myProperties.properties"); 
    Properties properties = new Properties(); 
    try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(propertiesFile))) { 
     properties.load(bis); 

    } catch (Exception ex) { 
     // 
    } 

+0

編集した回答を見る –

関連する問題