Apache commons-io實現多文件讀取和寫入


需求

”E:/data/”目錄下有四個文件夾,如下:

1

每個文件夾下有幾個.csv文件,如下:

2

將每個文件夾下的.csv文件合並成一個以該文件夾命名的.csv文件。

做法

找到“E:/data”這個目錄,循環讀取目錄下的四個文件夾;

針對每個文件夾,循環讀取目錄下的文件列表;

將讀取的文件寫入要合並的文件中。

代碼

package com.file_readwrite;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;

public class FileTest {
	public static void main(String[] args) {
		combine();	
	}
	public static void combine(){
		File files=new File("E:/data/");
        	String dirctorys1[]=files.list();
        	for(int x=0; x<dirctorys1.length; x++){
        		File file=new File("E:/data//"+dirctorys1[x]+".csv");
        		File fs = new File("E:/data/"+dirctorys1[x]);
        		String dirctorys2[]=fs.list();
        		for(int i=0;i<dirctorys2.length;i++){
        			File f = new File("E:/data/"+dirctorys1[x]+"/"+dirctorys2[i]);
        			try {
					List lines = FileUtils.readLines(f, "GBK");
					FileUtils.writeLines(file, lines, true);			
				} catch (IOException e) {
					e.printStackTrace();
				}
        	}
        }
	}
}

注意

List lines = FileUtils.readLines(f, "GBK");
FileUtils.writeLines(file, lines, true);

方法public static void writeLines(File file, Collection<?> lines, boolean append)

實現了逐句寫入一個文件,參數boolean append為"true"時表示添加文件,而不是新建新的文件。

當合並多個文件時必須設置為ture。

上面幾行代碼還可以用如下代碼代替:

LineIterator it = FileUtils.lineIterator(f, "GBK");
while(it.hasNext()){
	String line = it.nextLine();
	FileUtils.writeStringToFile(file, line, true);
}

這是使用Apache commons-io提供的迭代器實現。

org.apache.commons.io.LineIterator類提供了一個靈活的方式與基於行的文件交互。

可以直接創建一個實例,或者使用FileUtils或IOUtils的工廠方法來創建。

此外,方法public static void writeStringToFile(File file, String data, boolean append)

實現了將字符串寫入一個文件,參數boolean append為"true"時表示添加文件,而不是新建新的文件。

此參數必須設置為ture,否則結果文件中將只有一行數據。

或用如下代碼代替:

List lines = FileUtils.readLines(f, "GBK");
Iterator<String> it = lines.iterator();
while(it.hasNext()){
	String s = it.next();
	FileUtils.writeStringToFile(file, s, true);
}

這是普通的方式,使用List固有的迭代器實現。

運行結果

3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM