Jsp常用功能CSV文件的生成與分析_JSP教程
推薦:JSPServletJSF自定義標簽jsp自定義標簽的定義步驟: 創(chuàng)建標記處理器 創(chuàng)建TLD文件 編輯web.xml 在JSP頁面中使用此標簽 模板無憂 在此我們主要討論和學習的不是如何開發(fā)自定義標簽,所以具體的開發(fā)事例百度
CSV文件是指Excel可以識別的后綴名為CSV的文件,網(wǎng)站系統(tǒng)后臺用來存儲分析數(shù)據(jù)的時候有可能會用到它。其實CSV文件的讀取和做成比較簡單,主要的技術(shù)點是文件的讀寫。不過CSV文件的分析和生成有一定的代表性,可以通過對CSV文件的生成和分析的實現(xiàn),來了解后臺處理批量數(shù)據(jù)的簡單思路。
打開Excel,新建一個文件,在里面隨便輸入一些數(shù)據(jù),然后另存為一個CSV文件,再次用Excel打開的時候,發(fā)現(xiàn)只有一個sheet。用一個記事本打開這個文件,可以看到類似如下的數(shù)據(jù)。
aaa,bbb,ccc,ddd
aaa2,bbb2,,ddd2
aaa3,bbb3,ccc3,
aaa4,bbb4,ccc4,ddd4
仔細觀察數(shù)據(jù),可以確定以下幾點:
- CSV文件是文本型文件(非二進制)
- 文件中的一行在Excel中顯示的一行
- 同一行中的數(shù)據(jù)用半角逗號分隔
發(fā)現(xiàn)以上的規(guī)律,我們可以自己也生成一個CSV文件。也可以簡單的分析CSV文件。
現(xiàn)在給CSV文件的生成和分析寫個簡單的例子。(如果對文件處理類不熟悉,可以看一下java的文件處理,或者看一下JDK中關(guān)于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文件的內(nèi)容。
至此,CSV文件的生成與分析其實已經(jīng)完成。如果要寫適合自己需要的CSV文件分析類,完全可以根據(jù)自己的業(yè)務(wù)邏輯和需要來自己實現(xiàn)。因為CSV文件的分析確實很簡單。
不過上面的程序還是存在一些問題的。這些問題在開發(fā)的過程中應(yīng)當注意,不然可能出現(xiàn)致命的錯誤。
- 比較2個類中對資源的釋放問題。CSV生成類中FileWriter對象的關(guān)閉(close()方法)是在try中執(zhí)行的。而CSV分析類中InputStreamReader,BufferedReader對象的關(guān)閉(close()方法)是在finally中執(zhí)行的。CSV生成類是錯誤的。因為在文件和流的生成過程中,是有可能產(chǎn)生IO異常的,如果在對象close前發(fā)生IO異常,那么close方法永遠不會被調(diào)用,這樣資源不會及時釋放,會產(chǎn)生致命錯誤的。而在finally中的程序,是一定會被執(zhí)行的語句,所以即使操作中途發(fā)生問題,也會在最后執(zhí)行close方法。(try-catch-finally是java語法中基本而重要的部分,不熟悉的可查閱相關(guān)資料。)
- 在CSV文件的操作過程中,我們是按照半角逗號來分隔數(shù)據(jù)的,如果某個數(shù)據(jù)中正好有半角逗號,那么數(shù)據(jù)不是出錯了?
- 如果分析的數(shù)據(jù)有全角字符,是否能夠正確分析。(亂碼問題)
以上的第二個問題時必須考慮的。在寫一個類的時候,不要相信這個類要操作的數(shù)據(jù)或者得到的數(shù)據(jù)是好數(shù)據(jù)(完全符合要求的正確的數(shù)據(jù)),寫好的一個類用完全正確的數(shù)據(jù)測試完,很有可能一個小小的數(shù)據(jù)錯誤的問題,就有可能導致程序處理崩潰。所以,細節(jié)問題要充分考慮并對應(yīng)到,使自己編寫的類具有一定的健壯性。
分享:Jsp常用技巧圖片驗證碼思路: 圖片驗證碼的實現(xiàn)主要的技術(shù)點是如何生成一個圖片。生成圖片可以使用java.awt包下的類來實現(xiàn)。我們先寫一個簡單的生成圖片的程序HelloImage.java。以下是代碼部分。 package
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復習整理
- JSP腳本元素和注釋復習總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實現(xiàn)
- 網(wǎng)頁模板:關(guān)于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項目中連接Access數(shù)據(jù)庫的配置方法
- JDBC連接Access數(shù)據(jù)庫的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關(guān)鏈接:
- 教程說明:
JSP教程-Jsp常用功能CSV文件的生成與分析
。