我需要将 CSV 文件读入 Java 应用程序,但该文件是使用 Java 不支持的 Western(Mac OS Roman)编码的。
有人建议我使用字节流读取文本并将超过 128 的所有内容转换为空格字符(ASCII 字符 32)。但我不知道该怎么做。我不知道如何一次处理每个字节,如何转换它们,以及当我到达行尾时如何获取那行“截断”文本,将其拆分为一个数组,然后然后将数据从我需要的索引中提取出来。
SortedMap<String, OBJ_NAME> mapResults = new TreeMap<String, OBJ_NAME>();
String url = 'url-to-file';
InputStream inputStream = null;
InputStreamReader = null;
CSVReader = csvReader = null;
final Pattern regexPattern = Pattern.compile("^\\d{2}\\.\\d{1.3}$");
try {
inputStream = new URL(url).openStream();
reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
csvReader = new CSVReader(reader, ',', '"', 1);
List<String[]> lines = csvReacer.readAll();
for (String[] line : lines) {
// logic to grab data from first and second indices of the line
OBJ_NAME objInstance = new OBJ_NAME();
objInstance.setFieldOne(line[0]);
objInstance.setFieldTwo(line[1]);
mapResults.put(line[1], objInstance);
}
} catch (Exception e) {
throw new IOException(e);
} finally {
// IOUtils from apache commons
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(reader);
IOUtils.closeQuietly(csvReader);
}
因为 CSV 使用的是不受支持的格式,所以上面的逻辑是读取数据错误,因为它不是 UTF-8,所以我得到的结果比我应该得到的要少得多。我不确定是否应该将其输入为 ASCII 和超过 128 个“中断”字符(我不知道该怎么做),或者用字节流来代替(我也不知道该怎么做) .
帮助?此外,任何以过时、不受支持的编码发布带有官方信息的文档的人,都将受到惩罚。