1

FindBugs は (当然のことながら)、自分のファイルのエンコーディングを指定していないと不平を言いました。その後コードを変更しましたが、エラーが残り、理由がわかりません。

問題のコード:

private void readGndFile() throws IOException {
    try (final BufferedReader reader = Files.newBufferedReader(gndFile.toPath(), Charset.forName("utf-8"))) {
        readGndFile(reader); // Findbugs: Found reliance on default encoding
    }
}

同行方法:

private void readGndFile(final BufferedReader reader) throws IOException {
    while (true) {
        String line = reader.readLine();
        while (!isGndEntryHeader(line))
            line = reader.readLine();

        if (isEndOfFile(line))
            break;

        List<String> gndEntryParts = readGndEntry(reader);
        if (gndEntryParts == null)
            break;

        DataObject dataObject = tryConvertGndEntry(gndEntryParts);
        if (dataObject != null)
            dataObjects.add(dataObject);
    }
}

FindBugs 0.9.97でIntelliJ Idea 12を使用しています

さらにコードが必要な場合:

private boolean isGndEntryHeader(final String line) {
    final String gndHeaderMask = "<http://d-nb.info/gnd/[0-9]+-([0-9]|[a-zA-Z])>";

    return (line != null && !line.matches(gndHeaderMask));
}

private boolean isEndOfFile(final String line) {
    return (line == null);
}

private List<String> readGndEntry(final BufferedReader reader) throws IOException {
    List<String> gndEntry = new ArrayList<>();

    String line = reader.readLine();
    if (line == null)
        return null;
    else
        line = line.trim();

    while (line != null && !line.isEmpty()) {
        gndEntry.add(line.trim());
        line = reader.readLine();
    }

    if (line == null && gndEntry.size() == 0)
        return null;

    return gndEntry;
}

protected abstract DataObject tryConvertGndEntry(List<String> gndEntryParts);
4

0 に答える 0