批量處理txt文本文件到Excel文件中去----java


首發地址: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


免責聲明!

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



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