不多说了 直接看代码:
下面的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