最近需要記錄一下項目的日志,以便於日后的測試工作順利進行,從現有的情況來看,使用csv文件做一下簡單的記錄即可。
問題是,不知道該怎么操作?想起之前自己倒騰代碼的時候研究過怎么用java讀寫excel文件,當時采用的方法還隱約有印象,但並不確定是否適用於csv文件的讀寫。在一番面向互聯網開發之后,發現使用IO流即可對csv文件進行讀寫,但過程並不順利,其中居然出現了一些奇奇怪怪的問題,由此產生了總結記錄下來的想法。
摘錄部分代碼,總結如下:
File outFile = new File(path); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile, true),"gbk")); if (outFile.exists() && outFile.length() != 0) { return bw; } outFile.createNewFile(); bw.write("xxx,xxx,xxx,xxx,xxx"); //表頭 bw.newLine(); bw.flush(); return bw;
最初我是按照網上的一些代碼寫的,但是發現只記錄到了最新的數據,由此猜想新的數據將舊的數據覆蓋掉了,new FileOutputStream(outFile, true),這行代碼的第二個參數設置為true會在文件中追加數據,而不會將原本的數據覆蓋掉。
然后發現,記錄下來的數據出現亂碼的情況,這個問題我知道是由編解碼方式不一致導致的,一番搜索發現采用gbk方式即可解決亂碼問題。
以上這段代碼的大意就是,如果日志文件存在則返回一個BufferedWriter流,否則創建文件,寫入表頭,再返回流對象。
獲取到流對象后,即可對文件寫入數據,bw.newLine();的意思是換行,注意同一行中不同列的數據需要使用英文逗號分隔。
美中不足的地方在於沒有查到如何使用io流在一個csv文件中創建多個頁,所以如果有更靈活的需求推薦使用一些jar包而不是普通的io來實現。