国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JSP > 正文

Jsp常用功能CSV文件的生成與分析

2024-09-05 00:17:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

CSV文件是指Excel可以識(shí)別的后綴名為CSV的文件,網(wǎng)站系統(tǒng)后臺(tái)用來(lái)存儲(chǔ)分析數(shù)據(jù)的時(shí)候有可能會(huì)用到它。其實(shí)CSV文件的讀取和做成比較簡(jiǎn)單,主要的技術(shù)點(diǎn)是文件的讀寫(xiě)。不過(guò)CSV文件的分析和生成有一定的代表性,可以通過(guò)對(duì)CSV文件的生成和分析的實(shí)現(xiàn),來(lái)了解后臺(tái)處理批量數(shù)據(jù)的簡(jiǎn)單思路。

打開(kāi)Excel,新建一個(gè)文件,在里面隨便輸入一些數(shù)據(jù),然后另存為一個(gè)CSV文件,再次用Excel打開(kāi)的時(shí)候,發(fā)現(xiàn)只有一個(gè)sheet。用一個(gè)記事本打開(kāi)這個(gè)文件,可以看到類(lèi)似如下的數(shù)據(jù)。
aaa,bbb,ccc,ddd
aaa2,bbb2,,ddd2
aaa3,bbb3,ccc3,
aaa4,bbb4,ccc4,ddd4

仔細(xì)觀察數(shù)據(jù),可以確定以下幾點(diǎn):

  1. CSV文件是文本型文件(非二進(jìn)制)
  2. 文件中的一行在Excel中顯示的一行
  3. 同一行中的數(shù)據(jù)用半角逗號(hào)分隔

發(fā)現(xiàn)以上的規(guī)律,我們可以自己也生成一個(gè)CSV文件。也可以簡(jiǎn)單的分析CSV文件。
現(xiàn)在給CSV文件的生成和分析寫(xiě)個(gè)簡(jiǎn)單的例子。(如果對(duì)文件處理類(lèi)不熟悉,可以看一下java的文件處理,或者看一下JDK中關(guān)于java.io.File類(lèi)的幫助信息)
生成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();
}
}
}

這個(gè)類(lèi)編譯后運(yùn)行,可以看到在C盤(pán)根目錄下生成了一個(gè)名字為helloCsv.csv的CSV文件,雙擊打開(kāi),如下的樣子。

分析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文件讀取并分析。編譯后運(yùn)行,正常情況下,可以看到剛才生成的CSV文件的內(nèi)容。

至此,CSV文件的生成與分析其實(shí)已經(jīng)完成。如果要寫(xiě)適合自己需要的CSV文件分析類(lèi),完全可以根據(jù)自己的業(yè)務(wù)邏輯和需要來(lái)自己實(shí)現(xiàn)。因?yàn)镃SV文件的分析確實(shí)很簡(jiǎn)單。

不過(guò)上面的程序還是存在一些問(wèn)題的。這些問(wèn)題在開(kāi)發(fā)的過(guò)程中應(yīng)當(dāng)注意,不然可能出現(xiàn)致命的錯(cuò)誤。

  1. 比較2個(gè)類(lèi)中對(duì)資源的釋放問(wèn)題。CSV生成類(lèi)中FileWriter對(duì)象的關(guān)閉(close()方法)是在try中執(zhí)行的。而CSV分析類(lèi)中InputStreamReader,BufferedReader對(duì)象的關(guān)閉(close()方法)是在finally中執(zhí)行的。CSV生成類(lèi)是錯(cuò)誤的。因?yàn)樵谖募土鞯纳蛇^(guò)程中,是有可能產(chǎn)生IO異常的,如果在對(duì)象close前發(fā)生IO異常,那么close方法永遠(yuǎn)不會(huì)被調(diào)用,這樣資源不會(huì)及時(shí)釋放,會(huì)產(chǎn)生致命錯(cuò)誤的。而在finally中的程序,是一定會(huì)被執(zhí)行的語(yǔ)句,所以即使操作中途發(fā)生問(wèn)題,也會(huì)在最后執(zhí)行close方法。(try-catch-finally是java語(yǔ)法中基本而重要的部分,不熟悉的可查閱相關(guān)資料。)
  2. 在CSV文件的操作過(guò)程中,我們是按照半角逗號(hào)來(lái)分隔數(shù)據(jù)的,如果某個(gè)數(shù)據(jù)中正好有半角逗號(hào),那么數(shù)據(jù)不是出錯(cuò)了?
  3. 如果分析的數(shù)據(jù)有全角字符,是否能夠正確分析。(亂碼問(wèn)題)
    以上的第二個(gè)問(wèn)題時(shí)必須考慮的。在寫(xiě)一個(gè)類(lèi)的時(shí)候,不要相信這個(gè)類(lèi)要操作的數(shù)據(jù)或者得到的數(shù)據(jù)是好數(shù)據(jù)(完全符合要求的正確的數(shù)據(jù)),寫(xiě)好的一個(gè)類(lèi)用完全正確的數(shù)據(jù)測(cè)試完,很有可能一個(gè)小小的數(shù)據(jù)錯(cuò)誤的問(wèn)題,就有可能導(dǎo)致程序處理崩潰。所以,細(xì)節(jié)問(wèn)題要充分考慮并對(duì)應(yīng)到,使自己編寫(xiě)的類(lèi)具有一定的健壯性。

共3頁(yè)上一頁(yè)123下一頁(yè)
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武威市| 苏尼特右旗| 扶沟县| 佛冈县| 泸溪县| 航空| 岳阳县| 崇阳县| 易门县| 左云县| 清远市| 武穴市| 鹰潭市| 桑植县| 景宁| 繁峙县| 滦平县| 皋兰县| 阳江市| 天气| 南丹县| 龙游县| 重庆市| 大丰市| 正镶白旗| 新巴尔虎左旗| 惠州市| 夏河县| 永吉县| 阳江市| 旺苍县| 阳朔县| 香格里拉县| 裕民县| 陇西县| 日土县| 明水县| 普格县| 阿巴嘎旗| 黎川县| 许昌市|