前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >批量处理txt文本文件到Excel文件中去----java

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

作者头像
wust小吴
发布2019-07-05 11:00:00
8350
发布2019-07-05 11:00:00
举报
文章被收录于专栏:风吹杨柳风吹杨柳

不多说了 直接看代码:

下面的FileFind类首先是找到文件夹下面所有的txt文件,并且获取他们的绝对路径或者相对路径存放在数组中

代码语言:javascript
复制
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读取字段内容

代码语言:javascript
复制
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文件中去的主函数:

代码语言:javascript
复制
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)中

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年07月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档