【发布时间】:2019-09-16 08:03:16
【问题描述】:
我编写了一个准备 SQL 插入语句并将它们存储在文本文件中的方法。在这一点上,它完成了工作,但我有一个完全令人眼花缭乱的捕获块。如果我能以某种方式关闭 BufferedReader 而不会隐式调用 flush 那将是完美的。那可能吗?如果是,怎么做?
作为我正在制作的记忆应用程序用汉字(日文字符)数据填充主表的准备,我正在制作所有字符的列表。数据源是 KANJIDIC2,一个 UTF-8 编码的 xml 文件,包含 13k+ 个字符的数据。最初的想法是在源文件中包含所有字符,但由于某种原因,当我尝试将它们写入输出文件时,300 个左右的字符会抛出 java.nio.charset.MalformedInputException。
我决定放弃这些字符,因为它们不是必需的或任何东西,但是在上述异常之后我找不到关闭 BufferedReader 的平滑方法。
File outputFile = new File("C:\\Users\\tobbelobb\\Documents\\kanjilist.bsv");
try {
BufferedWriter bw = Files.newBufferedWriter(outputFile.toPath(), StandardCharsets.UTF_8);
for (Kanji nextKanji : kanjiList) {
try {
StringBuilder sb = new StringBuilder();
// sb.append stuff from list of objects...
bw.write(sb.toString());
bw.newLine();
bw.flush();
} catch (MalformedInputException ex) {
// Ungracefully swallow the exception.
ex.printStackTrace();
bw = Files.newBufferedWriter(outputFile.toPath(), StandardCharsets.UTF_8, StandardOpenOption.APPEND);
}
}
bw.close();
} catch (Exception ex) {
ex.printStackTrace();
}
我在 catch 块中寻找了一种方法来处理我的 BufferedReader 对象,但我唯一能找到的是close(),它再次抛出相同的MalformedInputException,并且在此过程中写入了不完整的文本行到我的文件。
【问题讨论】:
-
是的。我尝试了不同的编码。如果我不指定编码,它不会抛出异常,但 2/3 的字符显示为“?”在输出文件中。似乎它默认为 SJIS。 UTF-16 的覆盖率比 UTF-8 略好,但仍然抛出异常,所以我武断地决定坚持使用 UTF-8 并在其他地方寻找解决方案。
标签: java bufferedwriter