Jsp常用功能CSV文件的生成与剖析
发布时间:2023-07-26 14:19:57 所属栏目:教程 来源:
导读:CSV文件是指Excel可以识别的后缀名为CSV的文件,网站系统后台用来存储分析数据的时候有可能会用到它。其实CSV文件的读取和做成比较简单,主要的技术点是文件的读写。不过CSV文件的分析和生成有一定的代表性,可以通过
CSV文件是指Excel可以识别的后缀名为CSV的文件,网站系统后台用来存储分析数据的时候有可能会用到它。其实CSV文件的读取和做成比较简单,主要的技术点是文件的读写。不过CSV文件的分析和生成有一定的代表性,可以通过对CSV文件的生成和分析的实现,来了解后台处理批量数据的简单思路。 打开Excel,新建一个文件,在里面随便输入一些数据,然后另存为一个CSV文件,再次用Excel打开的时候,发现只有一个sheet。用一个记事本打开这个文件,可以看到类似如下的数据。 aaa,bbb,ccc,ddd aaa2,bbb2,,ddd2 aaa3,bbb3,ccc3, aaa4,bbb4,ccc4,ddd4 仔细观察数据,可以确定以下几点: CSV文件是文本型文件(非二进制) 文件中的一行在Excel中显示的一行 同一行中的数据用半角逗号分隔 发现以上的规律,我们可以自己也生成一个CSV文件。也可以简单的分析CSV文件。 现在给CSV文件的生成和分析写个简单的例子。(如果对文件处理类不熟悉,可以看一下java的文件处理,或者看一下JDK中关于java.io.File类的帮助信息) 生成CSV文件。(HelloCsvCreater.java) package com.vogoal.test; import java.io.FileWriter; import java.io.IOException; /** * @author SinNeR * * create a CSV file */ public class HelloCsvCreater { public static void main(String[] args) { try { FileWriter fw = new FileWriter("C://helloCsv.csv"); fw.write("aaa,bbb,ccc,ddd,eee,fff,ggg,hhh/r/n"); fw.write("aa1,bb1,cc1,dd1,ee1,ff1,gg1,hh1/r/n"); fw.write("aaa/r/n"); fw.write("aa2,bb2,cc2,dd2,ee2,ff2,gg2,hh2/r/n"); fw.close(); } catch (IOException e) { e.printStackTrace(); } } } 这个类编译后运行,可以看到在C盘根目录下生成了一个名字为helloCsv.csv的CSV文件,双击打开,如下的样子。 分析CSV文件 package com.vogoal.test; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; /** * @author SinNeR * * analysis a CSV file */ public class HelloCSVAnalysis { public static void main(String[] args) { InputStreamReader fr = null; BufferedReader br = null; try { fr = new InputStreamReader(new FileInputStream( "C://helloCsv.csv")); br = new BufferedReader(fr); String rec = null; String[] argsArr = null; while ((rec = br.readLine()) != null) { System.out.println(rec); argsArr = rec.split(","); for (int i = 0; i < argsArr.length; i ) { System.out.println("num " (i 1) ":" argsArr[i]); } } } catch (IOException e) { e.printStackTrace(); }finally{ try{ if ( fr != null ) fr.close(); if ( br != null ) br.close(); }catch(IOException ex){ ex.printStackTrace(); } } } } 这里将刚才生成的csv文件读取并分析。编译后运行,正常情况下,可以看到刚才生成的CSV文件的内容。 至此,CSV文件的生成与分析其实已经完成。如果要写适合自己需要的CSV文件分析类,完全可以根据自己的业务逻辑和需要来自己实现。因为CSV文件的分析确实很简单。 不过上面的程序还是存在一些问题的。这些问题在开发的过程中应当注意,不然可能出现致命的错误。 比较2个类中对资源的释放问题。CSV生成类中FileWriter对象的关闭(close()方法)是在try中执行的。而CSV分析类中InputStreamReader,BufferedReader对象的关闭(close()方法)是在finally中执行的。CSV生成类是错误的。因为在文件和流的生成过程中,是有可能产生IO异常的,如果在对象close前发生IO异常,那么close方法永远不会被调用,这样资源不会及时释放,会产生致命错误的。而在finally中的程序,是一定会被执行的语句,所以即使操作中途发生问题,也会在最后执行close方法。(try-catch-finally是java语法中基本而重要的部分,不熟悉的可查阅相关资料。) 在CSV文件的操作过程中,我们是按照半角逗号来分隔数据的,如果某个数据中正好有半角逗号,那么数据不是出错了? 如果分析的数据有全角字符,是否能够正确分析。(乱码问题) 以上的第二个问题时必须考虑的。在写一个类的时候,不要相信这个类要操作的数据或者得到的数据是好数据(完全符合要求的正确的数据),写好的一个类用完全正确的数据测试完,很有可能一个小小的数据错误的问题,就有可能导致程序处理崩溃。所以,细节问题要充分考虑并对应到,使自己编写的类具有一定的健壮性。 (编辑:聊城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐