1.因为字符串分割问题,一个疏漏导致Java java.lang.NumberFormatException: empty String;
2.涉及到文件编码问题而导致的乱码。
image.png
首先,为了保证能先把数据全部读取出来,我们先来解决第一个问题,它的意思是数字格式异常中的一种:空字符串(Java java.lang.NumberFormatException: empty String)
//读取CSV文件(导入文件)
public static ListreadCSV(String path) {
List list =new ArrayList();
File file =new File(path);
if (!file.exists()) {
file.mkdirs();
}
FileInputStream fiStream;
Scanner scanner;
try {
fiStream =new FileInputStream(file);
Log.e("fiStream =", fiStream.toString());
scanner =new Scanner(fiStream, "UTF-8");
Log.e("scanner =", scanner.toString());
scanner.nextLine();//读下一行,把表头越过。不注释的话第一行数据就越过去了
while (scanner.hasNextLine()) {
String sourceString = scanner.nextLine();
Log.e("source-->", sourceString);
String[] theStr = sourceString.split(",");
// Log.e("theStr-->", "theStr长度= "+theStr.length);
Log.e("theStr-->", theStr[0]);
BondModel bondModel =new BondModel(theStr[0], theStr[1], Integer.valueOf(theStr[2]), Float.valueOf(theStr[3]), theStr[4], Float.valueOf(theStr[5]));
list.add(bondModel);
Log.e("hu0114", "list = " + list);
Log.e("hu0114", "list = " + list.size());
}
}catch (NumberFormatException e) {
Toast.makeText(Get.getContext(), "NumberFormatException 错误:" + e.getMessage(), Toast.LENGTH_SHORT).show();
Log.e("hu0114", "NumberFormatException = " + e.getMessage());
}catch (FileNotFoundException e) {
Toast.makeText(Get.getContext(), "FileNotFoundException 错误:" + e.getMessage(), Toast.LENGTH_SHORT).show();
Log.e("hu0114", "FileNotFoundException = " + e.getMessage());
}
BondDao.saveList(list);
return list;
}
以上是我的导入文件代码,下面是我导入的文件的详情,因为我单价那一列都是没有数值,为空的状态,当我们通过代码将它读取转换成字符串进行分割之后,就会有" ",这样一个空字符串导致异常报错,也就没有办法把文件里的数据都完整地读取出来,所以我就把空的都补上(数字都是我瞎填的,不用太在意...)。
image.png
补完之后就能全部都读取出来了,但是读取出来的效果是这样的:
image.png
下面是应用的显示效果:
image.png
emmmm...... 这实在是没法看!
接着,我们就来解决第二个问题吧!因为涉及到文件编码问题而导致的乱码。
当时我也是脑壳疼了一阵,朋友说这是输入流的问题,导入的乱码,于是我在网上一阵搜索求助网上有经验的大神,看了很多篇都没有找到我想要的答案,最后在https://www.cnblogs.com/tester-lyj/p/13390712.html这位大佬的文章里找到了出现这样问题的原因以及解决办法!!!那就是因为文件的编码格式和AndroidStudio的默认编码格式不一致,所以才会导致这样的结果~
下面展示一下我们AndroidStudio的默认编码格式:(就在我们的编码页面的右下角有显示)
image.png
而文件的编码格式是怎么查看呢?
选中你要查看的文件,点右键,找到“打开方式”,选择“记事本”,然后在文件界面里面找到文件,然后选中“另存为...”
image.png
于是你就可以在这个界面的【保存】键旁边的【编码】
image
你会看到文件的默认编码是ANSI,点击下拉箭头可以看到好几种编码格式:
image
选中我们所需要的,跟AndroidStudio上的编码保持一致就可以了~ 然后手动保存,放到你需要的地方去。
至此问题解决!上最终我们需要的效果图!!苏喂苏喂~~~
image.png