对于我正在为客户开发的应用程序,我有一个大型高尔夫球场 SQLite 数据库,该数据库在版本化更新中重新填充了新数据,即将新数据添加到数据库中已有的现有记录中。
这些更新的一部分是数字和文本数据的混合,这些数据会自动导出为带有逗号分隔符的 .txt 文件(但也可以导出为 .rtf,尽管我认为 .txt 会更容易使用)。此 Pastebin 链接中给出了此类输出 .txt 文件的示例。
处理读取 .txt 文件并从每一行中获取每个值的代码是
// Insert records from csv file into database
BufferedReader reader = new BufferedReader(new InputStreamReader(in_s));
try {
String line;
while ((line = reader.readLine()) != null) {
String[] RowData = line.split(", ");
int numEntries = RowData.length;
if(numEntries == 5) {
// Course Insertion Row
// "Scenic Hills CC - WHITE", 70.0, 124, "Pensacola", "FL"
courseHelper.createCourse(RowData[0], Double.valueOf(RowData[1]), Integer.parseInt(RowData[2]), RowData[3], RowData[4]);
mCurrentLine++;
}
else {
// Hole Insertion Row
// 1, 1, 4, 416
holeHelper.createHole(Integer.parseInt(RowData[0]), Integer.parseInt(RowData[1]), Integer.parseInt(RowData[2]), Integer.parseInt(RowData[3]));
mCurrentLine++;
}
}
}
希望尝试自己处理课程数据库更新的客户不是非常精通技术,而是坚持使用他向我发送每次更新的新 .txt 文件的方法。
但是,随着我收到的一些 .txt 文件越来越大,我开始在每 100 行大约 2 行出现“java.lang.NumberFormatException:无法将'6'解析为整数”类型错误该文件的长度,除了 6 之外的不同数字,取决于 .txt 文件的哪一行导致异常。
在 Bless Hex Editor 中打开 .txt 文件,我注意到在导致 NumberFormatException 的每一行的开头,非 ascii 字符(以十六进制表示,EF BB)就在前导整数之前。显然,这个非 ASCII 字符正在使parseInt()
方法崩溃。
经过漫长的解释,我有两个主要问题:
- 即使这些非ASCII字符的放置在整个文件中似乎是伪随机的,解决根问题的最佳方法是什么?
- 如果无法对#1 进行良好修复,那么在相关活动中读入 .txt 文件之前“清理”它的好方法是什么?
提供的任何帮助将不胜感激。谢谢!