1. 程式人生 > >Groovy 之檔案操作

Groovy 之檔案操作

一:Java 與 Groovy 讀檔案操作比較

Groovy 對 java.io.File 進行了擴充套件,增加了一些接受閉包引數和簡化檔案操作的方法。作為對比,我們還是先來看看 java 中讀取檔案的兩種常方法,分別是行讀取和位元組緩衝區讀取:

01.//--BufferedReader 行讀取 02.BufferedReader br = null; 03.try { 04.br = new BufferedReader(new FileReader("foo.txt")); 05.List<String> content = new ArrayList<String>();
06.String line = null; 07.while((line=br.readLine())!=null){ 08.content.add(line); 09.} 10.} catch (FileNotFoundException e) { 11.} catch(IOException e){ 12.} finally{ 13.if(br != null){ 14.try { 15.br.close(); 16.} catch (IOException e) { 17.} 18.} 19.}
01.//--藉助於 buffer 緩衝區來讀位元組 02.InputStream is =
null;
03.try { 04.is = new FileInputStream("foo.txt"); 05.StringBuffer content = new StringBuffer(); 06.int read = -1; 07.byte[] buffer = new byte[1024]; 08.while((read=is.read(buffer))!=-1){ 09.content.append(new String(buffer,0,read)); 10.} 11.} catch (FileNotFoundException e) { 12.} catch(IOException e){
13.} finally{ 14.if(is != null){ 15.try { 16.is.close(); 17.} catch (IOException e) { 18.} 19.} 20.}

從上面可看到,採用 Java 傳統方式來讀取檔案內容,不僅程式碼行多,而且還必須自己用 try/catch/finally 來處理異常和資源的關閉。現在馬上來看看 Groovy 完成以上工作的程式碼是怎麼的,只要一行程式碼:

1.text = new File("foo.txt").getText();

不需要 Reader 或 Inputstream、不用關閉語名和異常處理。我們所要做的就是編寫業務邏輯,剩下的工作 Groovy 會幫你料理的。當然,如果檔案找不到,也是會出現 java.io.FileNotFoundException 異常的。你可以捕獲這個要處理的異常,但仍然不必擔心資源的釋放。

1.try{ 2.text = new File("foo.txt").getText(); 3.} catch(Exception e){ 4.}

1. eachLine -- 開啟和讀取檔案的每一行

 

1.new File("foo.txt").eachLine 2.println it.toUpperCase(); 3.}


2. readLines -- 其作用基本與 eachLine 相同,但它不接受閉包為引數,而是把檔案行讀到一個 List 中

 

1.lineList = new File("foo.txt").readLines(); 2.lineList.each 3.println it.toUpperCase(); 4.}


3. splitEachLine -- 讀取檔案的每一行,然後對行以指定分隔符分割成陣列。不用再多說了,這個方法對處理 CSV 檔案那可是相當的高效。

 

1.lineList = new File("foo.csv").splitEachLine(",") { 2.println "name=${it[0]} balance=${it[1]}"; 3.}


4. eachByte -- 處理二進位制檔案,以位元組級訪問檔案,這個方法相當於 eachLine() 方法。

 

1.new File("foo.bin").eachByte { print it; }


5. readBytes -- 自然,處理二進位制檔案,以位元組級訪問檔案,這個方法相當於 readLines() 方法了

 

1.byteList = new File("foo.bin").readBytes(); 2.byteList.each 3.println it; 4.}


6. write -- Groovy 用這個方法寫檔案真是太直觀了

 

1.new File("foo.txt").write("testing testing"); 2. 3.new File("foo.txt").write(""" 4.This is 5.just a test file 6.to play with 7.""");


以上使用了三重引用語法,其中的文字保留格式的寫入到檔案中。注意上面寫法在檔案首尾都會有一個空行,除非起始和結束字元都要緊貼 """;還有上面方法寫的檔案用詞本開啟會是擠在一行,用 editplus 開啟是多行,因為它採用的是 linux 下的 /n 換行,而不是 windows 下的 /r/n 換行。、

7. append -- 與 write 覆寫檔案不同,append 是在檔案後追加內容

 

1.new File("foo.txt").append("""/ 2.This is   3.just a test file   4.to play withff 5."""   6.);

8. eachFile -- 功能上類似 java.io.File 的 listFiles() 方法。用來列舉路徑中的每個檔案(包括目錄),傳給閉包處理

 

1.new File(".").eachFile {   //這裡的 File 表示的是一個路徑 2.println it.getName();  //eachFile() 列出的每一項是一個 File 例項 3.}


9. eachFileRecurse -- 以深度優先的方式遞迴遍歷路徑,列出檔案(包括目錄),傳給閉包處理

 

1.new File(".").eachFileRecurse {   //這裡的 File 表示的是一個路徑 2.println it.getPath();  //eachFile() 列出的每一項是一個 File 例項 3.}


10. …… 再重複一下,其他 Groovy 對 java.io.File 的擴充套件方法請參考 http://groovy.codehaus.org/groovy-jdk/java/io/File.html。如 eachDir()、eachDirMatch()、eachDirRecurse()、eachFileMatch()、filterLine()、newInputStream()、newOutputStream()、newReader()、newPrintWriter()、withInputStream()、withOutputStream()、withReader()、withPrintWriter() 等等。還要留意一下有一些方法是可以指定字符集的。


參考:1. 《Java 指令碼程式語言、框架與模式》第 4 章

相關推薦

Unmi 學習 Groovy 檔案操作

一:Java 與 Groovy 讀檔案操作比較 Groovy 對 java.io.File 進行了擴充套件,增加了一些接受閉包引數和簡化檔案操作的方法。作為對比,我們還是先來看看 java 中讀取檔案的兩種常方法,分別是行讀取和位元組緩衝區讀取: //--BufferedRe

Groovy 檔案操作

一:Java 與 Groovy 讀檔案操作比較 Groovy 對 java.io.File 進行了擴充套件,增加了一些接受閉包引數和簡化檔案操作的方法。作為對比,我們還是先來看看 java 中讀取檔案的兩種常方法,分別是行讀取和位元組緩衝區讀取: 01.//--Bu

node總結檔案操作系列(二)

接著上一篇部落格來啊,咱們繼續看非同步模式下關閉檔案的語法格式: fs.close(fd, callback) 引數描述如下: fd - 通過 fs.open() 方法返回的檔案描述符。 callback - 回撥函式,沒有引數。 例項如下: var

node總結檔案操作系列(一)

Node.js 提供一組類似 UNIX(POSIX)標準的檔案操作API,我們來看下Node 匯入檔案系統模組(fs)語法,如下: var fs = require("fs") Node.js 檔案系統(fs 模組)模組中的方法均有非同步和同步版本,例如讀取檔案內容的函式有非同步的 fs

python基礎檔案操作和簡單的類

檔案操作 #檔案刪除 import os path=".\\data\\" for s in os.listdir(path): filename=path+s print(filename) # os.remove("test.txt") #檔案開啟 f=open('test.

C++ 學習筆記——檔案操作檔案

1. 檔案的概念 對於使用者來說,常用到的檔案有兩大類:程式檔案和資料檔案。而根據檔案中資料的組織方式,則可以將檔案分為 ASCII 檔案和二進位制檔案。 ASCII 檔案,又稱字元檔案或者文字檔案,它的每一個位元組放一個 ASCII 程式碼,代表一個字元。 二進位制檔案,又稱內部格式檔案或位元

python基礎檔案操作基礎

  Python基礎之檔案操作   1、檔案的開啟方式 讀檔案的方式有四種:   r:只讀   rb:二進位制讀取   r+:讀寫,先讀在寫,在檔案游標處接著寫   r+b:二進位制讀取資料,英文讀取英文,中文轉為二進位制   # #檔案操作,開啟一個檔

python 3 檔案操作

檔案操作 1.檔案處理的流程  1)開啟檔案,得到檔案控制代碼並賦值給一個變數 2)通過控制代碼對檔案進行操作 3)關閉檔案         能呼叫方法的一定是物件       

python基礎檔案操作和函式

一、知識點 1.三元運算 a = 2 b = 3 val = 6 if a < b else 7 print(val) 2.檔案讀取 f = open(file='file.txt',mode='r',coding='utf-8') data = f.read() print(d

C語言檔案操作

一、開啟檔案 1、函式 fopen(path, type) 2、引數介紹 引數 型別 說明 備註 path 字串 檔案路徑 如”./h

python檔案操作的幾種模式總結

      檔案操作的幾種模式: "w"                             #write ,清空寫,生成一

python檔案操作示例

    方法一: with open("e:\\gloryroad.txt","a+",encoding="utf-8") as file: file.write("------"+"\n") print(file.tell()) 備註:使用此方式操作檔案,可以不用寫close()

Swift呼叫OC檔案操作-NSBundle

//*************************************************** // //      >>>>>>>Swif

python 基礎複習 08 檔案操作及練習

1 # 絕對路徑: 就是最完整的路徑 例子:"E:\資料結構與演算法\python.txt" 2 # 相對路徑: 相對則是不完整路徑。也就是說咱們寫的相對路徑必須是當前資料夾裡的檔案才可以open。 3 4 # 只讀 :r 5 # rb 6 # f = ope

day7 python檔案操作

python之檔案操作   一,檔案操作基本流程。 計算機系統分為:計算機硬體,作業系統,應用程式三部分。 我們用python或其他語言編寫的應用程式若想要把資料永久儲存下來,必須要保存於硬碟中,這就涉及到應用程式要操作硬體,眾所周知,應用程式是無法直接操作硬體的

【十二】python基礎檔案操作

給要開啟的檔案物件指定一個名字,這樣可在完成操作之後迅速關閉檔案,防止一些無用的檔案物件佔用記憶體   1 2 3 4 5 file_object = open('thefile.txt') try: all_the_text = fil

python檔案操作及字元編碼

檔案操作的基本流程 我們使用Python或者其他語言編寫的應用程式,當我們需要一些資料的時候,可能是資料庫中的資料,也可能是計算機本身儲存的資料。當我們需要應用到計算機中的資料的時候,那麼我們就需要操作計算機中的檔案。而Python給我們提供了檔案操作的方法。檔

linux作業系統基礎操作檔案操作

 檔案內容顯示命令 cat命令 cat [-AEnTv] file 功能一:顯示文字內容在螢幕上,但當檔案過大時用的不好 -n(--number)顯示行號 功能二:將兩個或多個檔案連線起來 tac命令 tac file 反向顯示檔案內容 nl命令 nl file 顯示檔

python 小兵(4)檔案操作 小問題

1.游標不對就用seek 2.檔案操作方面注意不要變修改變刪除,會爆出檔案正在執行不能操作 3.w模式下只有開始開啟的時候會清空 4.檔案操作的時候用as 後面的引數進行操作,不能用檔名進行操作 5.對一個檔案進行操作裡面的地址只用了那麼幾個因為他和java一樣有自動彈棧機制但是彈完後後會記得之前進入

shell命令列檔案操作

【檔案操作】 1、反選刪除檔案 先執行:shopt -s extglob 再執行:rm -rf !(file1) rm -rf !(file1|file2) 2、清空檔案內容 :> file 【磁碟管理】 1、檢視當前目錄下個檔