首发地址: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;
转载请注明,交流请联系[email protected]
批量处理txt文本文件到Excel文件中去----java
时间: 2024-10-10 09:16:23