java导入csv文件时利弊,关于在自己写的应用上导入csv文件时踩过的坑

1.因为字符串分割问题,一个疏漏导致Java java.lang.NumberFormatException: empty String;

2.涉及到文件编码问题而导致的乱码。

999e4e931821

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;

}

以上是我的导入文件代码,下面是我导入的文件的详情,因为我单价那一列都是没有数值,为空的状态,当我们通过代码将它读取转换成字符串进行分割之后,就会有" ",这样一个空字符串导致异常报错,也就没有办法把文件里的数据都完整地读取出来,所以我就把空的都补上(数字都是我瞎填的,不用太在意...)。

999e4e931821

image.png

补完之后就能全部都读取出来了,但是读取出来的效果是这样的:

999e4e931821

image.png

下面是应用的显示效果:

999e4e931821

image.png

emmmm...... 这实在是没法看!

接着,我们就来解决第二个问题吧!因为涉及到文件编码问题而导致的乱码。

当时我也是脑壳疼了一阵,朋友说这是输入流的问题,导入的乱码,于是我在网上一阵搜索求助网上有经验的大神,看了很多篇都没有找到我想要的答案,最后在https://www.cnblogs.com/tester-lyj/p/13390712.html这位大佬的文章里找到了出现这样问题的原因以及解决办法!!!那就是因为文件的编码格式和AndroidStudio的默认编码格式不一致,所以才会导致这样的结果~

下面展示一下我们AndroidStudio的默认编码格式:(就在我们的编码页面的右下角有显示)

999e4e931821

image.png

而文件的编码格式是怎么查看呢?

选中你要查看的文件,点右键,找到“打开方式”,选择“记事本”,然后在文件界面里面找到文件,然后选中“另存为...”

999e4e931821

image.png

于是你就可以在这个界面的【保存】键旁边的【编码】

999e4e931821

image

你会看到文件的默认编码是ANSI,点击下拉箭头可以看到好几种编码格式:

999e4e931821

image

选中我们所需要的,跟AndroidStudio上的编码保持一致就可以了~ 然后手动保存,放到你需要的地方去。

至此问题解决!上最终我们需要的效果图!!苏喂苏喂~~~

999e4e931821

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值