首發地址:http://blog.csdn.net/u014737138/article/details/38120403
不多說了 直接看代碼:
下面的FileFind類首先是找到文件夾下面所有的txt文件,並且獲取他們的絕對路徑或者相對路徑存放在數組中
public class FileFind { @SuppressWarnings("rawtypes") /** * 利用字符串的.endsWith()來判斷后綴名 * 利用文件類的.listFiles()來獲取一個文件夾下所有文件 * * @param path * @param data * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) private static List getData(String path, List data) { try{ File f = new File(path); if (f.isDirectory()) { File[] fs = f.listFiles(); for (int i = 0; i < fs.length; i++) { // 如果該文件夾下面還有文件夾,那么繼續往下面去找,遞歸 data = getData(fs[i].getPath(), data); } } else if (f.getName().endsWith(".txt")) { // 匹配文本文件,*.txt data.add(f.getName());// 得到相對路徑 } }catch(Exception e){ e.printStackTrace(); } return data; } /** * * @param path * @param data * @return data 返回文件的絕對路徑 */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static List getFileAbsolutePath(String path, List data) { try{ File f = new File(path); if (f.isDirectory()) { File[] fs = f.listFiles(); for (int i = 0; i < fs.length; i++) { // 如果該文件夾下面還有文件夾,那么繼續往下面去找,遞歸 data = getFileAbsolutePath(fs[i].getPath(), data); } } else if (f.getName().endsWith(".txt")) { // 匹配文本文件,*.txt data.add(f.getAbsolutePath().toString());// 得到相對路徑 // System.out.println(f.getAbsolutePath());// 得到絕對路徑 } }catch(Exception e){ e.printStackTrace(); } return data; } }
類GetStringByLocation獲取文本文件內容,這個案例中只用了,readTEXT函數,按照\t讀取字段內容
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class GetStringByLocation { /** * 按照行讀取文本文件的數據,每一行存入到list一維數組中 * * @param list 用來存儲讀取的數據 * @param destFile 讀取的文件路徑 * @throws Exception 讀取文件出錯 拋出異常 */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void readTxt(List list, String destFile) throws Exception { try{ BufferedReader reader = new BufferedReader(new FileReader(destFile)); String line = reader.readLine(); while (line != null) { list.add(line); line = reader.readLine(); } reader.close(); }catch(Exception e){ e.printStackTrace(); } } /** * * @param list 存放讀取的結果,按照每行的數據格式 \t讀取每一個字段 * @param pathName 讀取的文本文件路徑 * @throws Exception 拋出異常 */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void readTEXT(List list,String pathName) throws Exception{ String text = null; try { InputStreamReader read1 = new InputStreamReader(new FileInputStream(pathName)); BufferedReader br1 = new BufferedReader(read1); while((text = br1.readLine())!=null) { /***相應操作***/ System.out.println(text); String[] ss =text.split("\t"); for(int j=0;j<ss.length;j++){ System.out.println(ss[j]); list.add(ss[j]); } text = br1.readLine(); } br1.close(); } catch(FileNotFoundException e) { System.out.println(e); } catch(IOException e) { System.out.println(e); } } /** * 從文件讀取數據 * @param path 文件路徑 * @return 文件數據 */ public static List<String> getFileData(String path) { List<String> result = new ArrayList<String>(); FileReader fr = null; BufferedReader br = null; try { fr = new FileReader(path); br = new BufferedReader(fr); String str; while((str = br.readLine()) != null) { result.add(str); } } catch(IOException e) { e.printStackTrace(); } finally { try { if(fr != null) { fr.close(); } if(br != null) { br.close(); } } catch(IOException e) { e.printStackTrace(); } } return result; } }
最后就是寫入到Excel文件中去的主函數:
public class ExcelForAlibaba { @SuppressWarnings("rawtypes") public static void main(String[] args) { String targetfile = "E:/out.xls";// 輸出的excel文件名 String worksheet = "InfoList";// 輸出的excel文件工作表名 String[] title = { "A", "A", "A" };// excel工作表的標題 WritableWorkbook workbook; try { // 創建可寫入的Excel工作薄,運行生成的文件在tomcat/bin下 // workbook = Workbook.createWorkbook(new File("output.xls")); OutputStream os = new FileOutputStream(targetfile); workbook = Workbook.createWorkbook(os); WritableSheet sheet = workbook.createSheet(worksheet, 0); // 添加第一個工作表 jxl.write.Label label; System.out.println("title:"+title.length); for (int i = 0; i < title.length; i++) { // Label(列號,行號 ,內容 ) label = new jxl.write.Label(i, 0, title[i]); sheet.addCell(label); } //添加內容: String[] row = { "E", "E", "E" };// excel工作表的的行數據 jxl.write.Label label1; System.out.println("row:"+row.length); for(int i =0;i<row.length;i++){ label1 = new jxl.write.Label(i, 1, row[i]); sheet.addCell(label1); } try{ GetStringByLocation test = new GetStringByLocation(); FileFind filefind = new FileFind(); List absdata = new ArrayList();//存放文本文件的絕對路徑 String path = "E:\\DD\DD\\test";//文件夾路徑 absdata = filefind.getFileAbsolutePath(path, absdata);//獲取文本文件的路徑集,存放在數組中 int j=2;//從第三行開始,寫到Excel文件中 for (int m = 0; m < absdata.size(); m++) { //每一個文件進行操作,每一個文件里面的內容都放在list中, List list = new ArrayList();//存放每一個文件的內容 test.readTEXT(list, absdata.get(m).toString()); for (int i = 0; i < 3; i++) { //i表示第一列,第二列。。。。。。 jxl.write.Label labeltemp; // System.out.println(list.get(i).toString()); labeltemp = new jxl.write.Label(i, j, list.get(i).toString()); sheet.addCell(labeltemp); } j++;//從下一行開始寫起 } }catch(Exception e){ e.printStackTrace(); } workbook.write(); workbook.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println("end"); } }
以上代碼經過測試完全沒有問題。需要導入的包自己弄,需要自己寫三個包
package org.txtOperate; GetStringByLocation
package org.file.operate; FileFind
package org.excelTest;man()
需要引用的各種第三方包:在main(0)中
import jxl.*; import jxl.write.*; import java.io.*; import java.io.File.*; import java.util.*; import org.file.operate.FileFind; import org.txtOperate.GetStringByLocation;
轉載請注明,交流請聯系nlp30508@qq.com