项目需求我在 之前的博客已经具体分析了,现在就是具体实现
学生信息存取
项目特别指出对学生信息要从硬盘文件中读写,这就涉及到java读取文件操作
我是读取Excel文件,这也方便我们在物理文件中直接打开该文件查看
读入java程序中需要有实体类支撑,所以我创建了个实体类
其方法都是各属性的get set方法,这里就不占用空间了
类结构如下
init是初始化操作,随机生成1000条 学生信息,供排序算法体现复杂度
java读写xlsx文件
Excel文件有两种格式xls和xlsx
区别如下
后者能兼容前者,那毫无疑问用后者就行
这个首先需要下载jar包并导入
下载这个即可
下载完后把所有的jar文件复制到项目中
并设置为库文件
然后就可以写代码了,以下是常规的读写操作,基本流程如下
- 建立输入/输出流,参数为目标文件的绝对路径(我本想写成相对路径,但是失败了)
- 创建工作簿,参数就是刚才的i/o流
- 在工作簿中获取工作表,毕竟Excel中可能含多个表嘛
- 在工作簿中获取目标行
- 对目标行进行操作(get获取或者create创建)
package system.data.database;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class RoW {
public static void main(String[] args) {
try {
//1、建立输入 输出流
FileInputStream fip = new FileInputStream("F:\\java项目\\student_manage_system\\src\\system\\data\\database\\test.xlsx");
FileOutputStream fop = new FileOutputStream("F:\\java项目\\student_manage_system\\src\\system\\data\\database\\test1.xlsx");
//2、在输入流中获取工作簿
XSSFWorkbook wb = new XSSFWorkbook(fip);
XSSFWorkbook wb1 = new XSSFWorkbook();
//3、在工作簿中获取目标工作表
// XSSFSheet sheet = wb.getSheet("Sheet1");通过表名获取
XSSFSheet sheet = wb.getSheetAt(0);
XSSFSheet sheet1 = wb1.createSheet("ceshi");
//4、在工作表中获取目标行
XSSFRow row = sheet.getRow(0);
XSSFRow row1 = sheet1.createRow(0);
//5、获取目标单元格的值
for(int i=0;i<row.getPhysicalNumberOfCells();i++){
if(i>2){
System.out.print(" ");
}
System.out.printf("%10s",row.getCell(i).getStringCellValue());
row1.createCell(i).setCellValue(row.getCell(i).getStringCellValue());
}
System.out.println();
// /*以上为输出列名,以下输出数据*/
for (int i=1;i<sheet.getPhysicalNumberOfRows();i++){
row = sheet.getRow(i);
row1 = sheet1.createRow(i);
int a1= (int) (row.getCell(0).getNumericCellValue());
String a2 = row.getCell(1).getStringCellValue();
String a3 = row.getCell(2).getStringCellValue();
int a4= (int) (row.getCell(3).getNumericCellValue());
int a5= (int) (row.getCell(4).getNumericCellValue());
int a6= (int) (row.getCell(5).getNumericCellValue());
int a7= (int) (row.getCell(6).getNumericCellValue());
int a8= (int) (row.getCell(7).getNumericCellValue());
int a9= (int) (row.getCell(8).getNumericCellValue());
System.out.printf("%10d\t%10s\t%10s\t%10d\t%10d\t%10d\t%10d\t%10d\t%10d\n",a1,a2,a3,a4,a5,a6,a7,a8,a9);
/*以下为设置新表值*/
row1.createCell(0).setCellValue(a1);
row1.createCell(1).setCellValue(a2);
row1.createCell(2).setCellValue(a3);
row1.createCell(3).setCellValue(a4);
row1.createCell(4).setCellValue(a5);
row1.createCell(5).setCellValue(a6);
row1.createCell(6).setCellValue(a7);
row1.createCell(7).setCellValue(a8);
row1.createCell(8).setCellValue(a9);
}
fip.close();
wb1.write(fop);
fop.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
存取在项目中实现
但要落实到项目中,应当做适应性调整
这是读取Excel表中的信息
public void read(){
try {
//1、建立输入流
FileInputStream fis = new FileInputStream("F:\\java项目\\student_manage_system\\src\\system\\data\\database\\list.xlsx");
//2、读取工作簿
XSSFWorkbook wb = new XSSFWorkbook(fis);
//3、获取工作表
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
for(int i=1;i<sheet.getPhysicalNumberOfRows();i++){
row = sheet.getRow(i);
Student s = new Student();
s.setId((int)(row.getCell(0).getNumericCellValue()));
s.setName(row.getCell(1).getStringCellValue());
s.setMajor(row.getCell(2).getStringCellValue());
s.setMath((int)(row.getCell(3).getNumericCellValue()));
s.setEnglish((int)(row.getCell(4).getNumericCellValue()));
s.setPolitics((int)(row.getCell(5).getNumericCellValue()));
s.setProfession((int)(row.getCell(6).getNumericCellValue()))