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、檢視當前目錄下個檔