1

指定されたコンテンツ (ファイル、StringまたはInputStream) がJava プロパティファイル形式であるかどうかを認識する方法は?

コンテンツはデータベースに保存され、プロパティ ファイルのProperties 場合は解析する必要があります。ただし、私が気づいた簡単なテストでは、java.util.Propertiesエラーなしでxmlファイルを解析しました</log4j)。通常のテキストファイルも「解析」できます。

では、java.util.Properties実質的にすべてのテキストを解析できる場合、プロパティ ファイルがあるかどうかをどのように認識できますか? これが他の認識されている形式であるかどうかを確認する必要がありますか、ヒューリスティックを使用できますか、またはそのような機能を備えた既存のライブラリがありますか?

4

3 に答える 3

2

私はこのようにします

private boolean isProperties(Scanner sc) {
    Pattern p = Pattern.compile("\\w.*[=:] *.+");
    int nProps = 0;
    while (sc.hasNextLine()) {
        String line = sc.nextLine();
        if (!line.startsWith("#")) {
            if (!p.matcher(line).matches()) {
                sc.close();
                return false;
            }
            nProps++;
        }
    }
    sc.close();
    return nProps > 0;
}

public boolean isProperties(String s) {
    return isProperties(new Scanner(s));
}

public boolean isProperties(File f) throws FileNotFoundException {
    return isProperties(new Scanner(f));
}

     ... more overloaded isProperties for different sources

これは単なるプロトタイプです。正規表現には改善が必要な場合があります。Properties.load API を参照してください。私はxmlバージョンを無視しますが、APIにDTDがあるため、必要に応じてさらに簡単です

于 2012-12-06T14:10:53.293 に答える
2

たとえば、ストリーム(ファイルまたは文字列)をBufferedReaderに読み込みます。次に、xml ファイルの形式でプロパティを確認します。

javadoc から取得:

The XML document must have the following DOCTYPE declaration:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

したがって、DOCTYPE を確認できます (リーダーを使用して最初の行を調べるか、jdom などの xml パーサーで解析することにより)。DOCTYPE がある場合は、次を使用します。

Properties.loadFromXML()

それ以外の場合は、パターン \s*\w+\s*=.* に一致する行を探すことができます。これにより、そこで何らかの割り当てが行われていることがわかります。したがって、ロードするプロパティ ファイルである可能性があります。

Properties.load()
于 2012-12-06T13:48:36.543 に答える
0

propertyNames()メソッドを結果のプロパティオブジェクトに送信できます。1つ以上の名前を取得した場合(列挙型を取得します。テストとしてhasMoreElements()メソッドを使用します)、それが有効なプロパティファイルであると見なすことができます。

于 2012-12-06T13:32:29.140 に答える