读取导入excel表txt文档,并存储到List<E>对象中

本练习是参考慕课网上的一个学习视频“excel的导入导出”

网址:https://www.imooc.com/learn/354

这里面所用到的jar包都来源于上面网址上的

package excel;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;


import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import excel.Student;


public class StudentDAO {


// 实现读学生文件,将读出的信息存放于student集合中
    public List<Student> ReadFromExcel(String fileName) {


        List<Student> list = new ArrayList<Student>();
        FileInputStream in = null;
        try {
            in = new FileInputStream(fileName);
            HSSFWorkbook book = new HSSFWorkbook(in);
            // 得到第一个Sheet页
            HSSFSheet sheet = book.getSheetAt(0);
            HSSFRow row;


            for (int i = sheet.getFirstRowNum() + 1; i < sheet.getPhysicalNumberOfRows(); i++) {
                Student student = new Student();
                /*
                 * 核心代码
                 */
                row = sheet.getRow(i);  //获取sheet表中的第i行
                int j = row.getFirstCellNum();//获取这行当中第一个单元格的位置
                /*
                 * 通过row.getCell(index)来获取单元格中的内容,从而为Student对象赋值
                 */
                student.setId(row.getCell(j).toString());
                student.setName(row.getCell(j + 1).toString());
                student.setGender(row.getCell(j + 2).toString());
                student.setJava(Float.parseFloat(row.getCell(j + 3).toString()));
                student.setEnglish(Float.parseFloat(row.getCell(j + 4).toString()));
                student.setMath(Float.parseFloat(row.getCell(j + 5).toString()));
                
                list.add(student);
            }
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }


        return list;
    }
/*
*  从文本文件中读,将读出的数据存放于集合中
*  1:难点在于正则的使用,将字符串拆分。
*  2:其次就是BufferReader流的readLine方法可以读取一行数据
*/
public List<Student> ReadFromTxt(String fileName) {


List<Student> list = new ArrayList<Student>();

       File file = new File(fileName);
       try {
           BufferedReader bf = new BufferedReader(new FileReader(file));


           String content = "";


           while (content != null) {
               content = bf.readLine();


               if (content == null) {
                   break;
               }
               // 设置正则将多余空格或Tab键都转为一个空格
               
               String[] str = content.trim().split("\\s{2,}|\t");
               Student student = new Student();


               student.setId(str[0]);
               student.setName(str[1]);
               student.setGender(str[2]);
               student.setJava(Float.parseFloat(str[3]));
               student.setEnglish(Float.parseFloat(str[4]));
               student.setMath(Float.parseFloat(str[5]));




               list.add(student);
           }


           bf.close();
       } catch (IOException e) {
           e.printStackTrace();
       }


       return list;
}


/*
* 从键盘中输入一条数据,将数据存放于对象中,若student对象为null,表示输入错误
* 难点在于split("\\ ");将字符串拆分为数组(当然这个方法一旦输入错误,比如将一个“ ”输入成两个“ ”就凉了啊,直接报错!)
*/
public Student ReadFromKeyBoard() {
       String s = " ";
Student student = new Student();
System.out.println("请输入学生信息:");
Scanner input = new Scanner (System.in);
    s = input.nextLine();
String[] str =s.split("\\ ");
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
System.out.println();
}
student.setId(str[0]);
         student.setName(str[1]);
         student.setGender(str[2]);
         student.setJava(Float.parseFloat(str[3]));
         student.setEnglish(Float.parseFloat(str[4]));
         student.setMath(Float.parseFloat(str[5]));
         //System.out.println(student);
// if (student == null)
// {
// System.out.println("输入错误,请重新输入:");
// ReadFromKeyBoard();
// }
return student;

  
}


// 根据学号查询,返回的结果存放于集合中,若集合为空,表示没找到
public List<Student> QueryById(String id) {


        
List<Student> list = new ArrayList<Student>();
List<Student> li = ReadFromTxt("c:/data/student.txt");
  for (int i=0;i<li.toArray().length;i++){
  if (id.equals(li.get(i).getId())){
  list.add(li.get(i));
  System.out.println("java成绩为"+li.get(i).getJava()+"\n"+"英语成绩为:"+li.get(i).getEnglish()+"\n"+"数学成绩为:"+li.get(i).getMath());
  }
  else
  System.out.println("不存在该学生");
  }
return list;
}


/*
* 将集合中的数据写入到excel文件中
* 重难点在于 label = new Label(0,(int)(i+2),list.get(i).getId());
* sheet.addCell(label);
*/
public void WriteExcel(List<Student> list, String fileName) {
System.out.println(list);
String[] title = {"学号","姓名","性别","java","英语","数学"};
//创建Excel文件
File file = new File(fileName);
try {
file.createNewFile();
//创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(file);
//创建sheet
WritableSheet sheet = workbook.createSheet("sheet1", 0);
Label label = null;
//第一行设置列名
for (int i = 0; i < title.length; i++) {
label = new Label(i,0,title[i]);
sheet.addCell(label);
}

/*
* 追加数据 
* 详细学习网址请看慕课网:https://www.imooc.com/video/7100
*/
for (int i=0;i<list.toArray().length;i++){
label = new Label(0,(int)(i+2),list.get(i).getId()); //0为列号,(int)(i+2)为行号,list.get(i).getId())为要转入到单元格中的数据
sheet.addCell(label);
label = new Label(1,(int)(i+2),list.get(i).getName());
sheet.addCell(label);
label = new Label(2,(int)(i+2),list.get(i).getGender());
sheet.addCell(label);
label = new Label(3,(int)(i+2),list.get(i).getJava()+"");
sheet.addCell(label);
label = new Label(4,(int)(i+2),list.get(i).getEnglish()+"");
sheet.addCell(label);
label = new Label(5,(int)(i+2),list.get(i).getMath()+"");
sheet.addCell(label);
}
//写入数据
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}


// 将集合中的数据写入到txt文件中
public void WriteTxt(List<Student> list, String fileName) {
try {
File file = new File(fileName);
file.createNewFile();
   BufferedWriter bw = new BufferedWriter(new FileWriter(file));

   for(int i=0;i<list.size();i++){
           bw.write(list.get(i).toString()); //将list中第i个对象写入进去。
           bw.newLine();  //写入一个分隔符
           
       }
   bw.close();
} catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}

}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值