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);