我正在使用UTF-8编码器通过从DB中读取文本来形成文件:
csvBufWr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fname), Charset.forName("UTF-8").newEncoder()), (int) buffersize);
csvBufWr.write(recordtoinsert);
csvBufWr.newLine();
然后根据记录将该文件与另一个文件(来自我无法控制的另一个系统)进行比较,使用shell脚本。 合并后,我必须使用Apache POI创建一个excel表。所以我按如下所示阅读文件并写入excel表。
CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
//decoder.onMalformedInput(CodingErrorAction.IGNORE);
csvBufRdr = new BufferedReader(new InputStreamReader(new FileInputStream(pathAndFileName), decoder));
// read the file line by line, parse the record and write them
// to the XL file
while ((line = csvBufRdr.readLine()) != null) {
if (!line.isEmpty() && line.length() > 8) {
parseAndWrite2Sheet(line, sheet, workBook, sheetName);
}
}
但是,在读取一些随机数行后,我在line = csvBufRdr.readLine()
遇到MalformedInputException。我已经检查了正在阅读的文件,似乎没有奇怪的字符。即使我删除了发生异常的行以及它上面和下面的2行,我也会在相同的行号处遇到异常。添加decoder.onMalformedInput(CodingErrorAction.IGNORE)
似乎已经克服了这个问题,但每个人都担心我们是否会删除一个不可接受的记录或字符。
我比较了生成的excel和使用的文件,似乎没有区别。任何人都能指出我为什么会这样吗?
是否因为LINUX中的合并,AFAIK默认使用UTF文件进行处理,似乎不太可能导致问题。
我在我的智慧结束!