java xls文件数据导入

本文介绍了一个用于批量导入商品优化信息的Java程序实现。该程序能够读取特定文件夹下的Excel文件,解析文件中的数据,并将数据导入到数据库中。根据关键词和词类型的不同,程序会调用相应的数据库操作方法来更新或插入数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.yicomm.mobile.goods.charge.bo;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


import com.yicomm.datapush.bo.DaoFactory;
import com.yicomm.mobile.commons.Constants4Goods;
import com.yicomm.mobile.goods.charge.dao.ItemOptimiCateDao;
import com.yicomm.mobile.goods.charge.dao.ItemOptimiInfo2Dao;
import com.yicomm.mobile.goods.charge.entity.ItemOptimiCate;
import com.yicomm.mobile.goods.charge.entity.ItemOptimiInfo2;


public class ItemOptimiInf2Bo {
private static ItemOptimiInf2Bo instance;
//protected ItemOptimiCateDao itemOptimiCateDao = DaoFactory.getInstance().getItemOptimiCateDao(Constants4Goods.MACHINE_NO);

private ItemOptimiInf2Bo(){

}
public static  ItemOptimiInf2Bo getInstance() {
if(instance==null) {
synchronized(ItemOptimiInf2Bo.class){
if(instance==null){
instance = new ItemOptimiInf2Bo();
}
}
}
return instance;
}
public void importItemOptimiInf2(){
Constants4Goods.MACHINE_NO =0;
ItemOptimiCateDao itemOptimiCateDao = DaoFactory.getInstance().getItemOptimiCateDao(Constants4Goods.MACHINE_NO);
ItemOptimiInfo2Dao itemOptimiInfo2Dao = DaoFactory.getInstance().getItemOptimiInfo2Dao(Constants4Goods.MACHINE_NO);
String filePath = "D:\\import\\";
File dir = new File(filePath);
if(dir.exists()){ //存在当前文件夹才进行导入
System.out.println("文件夹存在,需要处理内容");
//获取文件夹下所有文件
File[] fs = dir.listFiles();
if(fs.length>0){ //存在需要导入的文件
for(int i=0;i<fs.length;i++){
File file = fs[i];
String path = file.getAbsolutePath(); //文件绝对路径
System.out.println(path);

String fileName = file.getName();
Map<String,String> word = getKeyWordAndWordType(fileName);
String cidName = word.get("keyWord");
String wordType = word.get("wordType");

//类目查询
ItemOptimiCate cate = new ItemOptimiCate();
cate.setName(cidName);
List<ItemOptimiCate> cateList = itemOptimiCateDao.getItemOptimiCateListByName(cate);
if(cateList!=null && cateList.size()>0){
//解析xls文件
List<ItemOptimiInfo2> optimiInfo2List =  readXml(path,wordType);
if(optimiInfo2List!=null && optimiInfo2List.size()>0){
for(ItemOptimiCate obj:cateList){
long cid = obj.getCid();
for(ItemOptimiInfo2 info2 : optimiInfo2List){
//检查当前类目当前关键词当前类型是否存在,存在先删除,再添加
info2.setCid(cid);
List<ItemOptimiInfo2> info2List = itemOptimiInfo2Dao.getItemOptimiInfo2List(info2);
if(info2List !=null && info2List.size()>0){
for(ItemOptimiInfo2 obj1:info2List){
itemOptimiInfo2Dao.deleteItemOptimiInfo2(obj1.getId());
}
}
itemOptimiInfo2Dao.saveItemOptimiInfo2(info2);

}
}
}

}
//处理完毕删除文件
file.delete();
}
}

}else{
System.out.println("导入文件夹不存在,不处理啦啦啦~~~~");
}
}
//解析文件,返回list
public List<ItemOptimiInfo2> readXml(String filePath,String wordType){
List<ItemOptimiInfo2> list = new ArrayList<ItemOptimiInfo2>();

boolean isE2007 = false;    //判断是否是excel2007格式  
if(filePath.endsWith("xlsx"))  isE2007 = true;  
try {
InputStream input = new FileInputStream(filePath);
Workbook wb  = null;  
            //根据文件格式(2003或者2007)来初始化  
            if(isE2007)  
                wb = new XSSFWorkbook(input);  
            else  
                wb = new HSSFWorkbook(input);
            
            Sheet sheet = wb.getSheetAt(0);     //获得第一个表单  
            Iterator<Row> rows = sheet.rowIterator(); //获得第一个表单的迭代器  
           
            while (rows.hasNext()) {
            Row row = rows.next();  //获得行数据  
            if(row.getRowNum()>4){ //从第5行开始处理,之前都是无效数据
            ItemOptimiInfo2 info2 = new ItemOptimiInfo2();
            System.out.println("Row #" + row.getRowNum()+"-->"+row.getCell(0));  //获得行号从0开始
            String num = row.getCell(0).toString(); //序号
            info2.setOrderNum(Integer.valueOf(num));
            info2.setWordtype(Short.valueOf(wordType));
            String key = row.getCell(1).toString(); //关键词
            info2.setKeyword(key);
            int iTmp = (int) Math.round(Math.random()*10);
           
             
            if(wordType!=null && ("0".equals(wordType)||"1".equals(wordType))){//词类型
            //商城点击率
            String tmClickRate = row.getCell(3).toString(); 
            double dtmClickRate =0.00;
            if(tmClickRate!=null && !"".equals(tmClickRate)){
            tmClickRate = tmClickRate.replace("%", "");
                dtmClickRate= Double.valueOf(tmClickRate)*iTmp -iTmp;
            }else{
            dtmClickRate = Math.random();
            }
            info2.setTmClickRate(Double.valueOf(dtmClickRate));
            }else{
            //相关搜索词数
            String relatedSuv = row.getCell(3).toString();
            double iRelateSuv = 0;
            if(relatedSuv!=null && !"".equals(relatedSuv)){
            iRelateSuv = Double.valueOf(relatedSuv)-iTmp;
            }else{
            iRelateSuv = (double) (iTmp * Math.random()*100);
            }
            info2.setRelatedSuv(iRelateSuv);
            }
            //搜索人气
            String suv = row.getCell(2).toString(); 
            double iSuv = 0;
             
            if(suv !=null && !"".equals(suv)){
            iSuv = Double.valueOf(suv)+iTmp;
            }else{
            iSuv = (int) (iTmp * Math.random()*100);
            }
            info2.setSuv(iSuv);
            //点击率
            String clickRate = row.getCell(4).toString();
            double dClickRate = 0.00;
            if(clickRate!=null && !"".equals(clickRate)){
            dClickRate =  Double.valueOf(clickRate)*Math.random();
            }else{
            dClickRate = Math.random();
            }
            info2.setClickRate(dClickRate);
            //点击人气
            String clickUv = row.getCell(5).toString();
            double iClickUv = 0;
            if(clickUv !=null && !"".equals(clickUv)){
            iClickUv = Double.valueOf(clickUv)+iTmp;
            }else{
            iClickUv = (double) (iTmp * Math.random()*100);
            }
            info2.setClickUv(iClickUv);
            //支付转化率
            String payRate = row.getCell(6).toString();
            double dPayRate = 0.00;
            if(payRate!=null && !"".equals(payRate)){
            dPayRate =  Double.valueOf(payRate)*Math.random();
            }else{
            dPayRate = Math.random();
            }
            info2.setPayRate(dPayRate);
            //参考价
            String p4pRefPrice = row.getCell(6).toString();
            double dP4pRefPrice = 0.00;
            if(p4pRefPrice!=null && !"".equals(p4pRefPrice)){
            dP4pRefPrice =  Double.valueOf(p4pRefPrice)*iTmp;
            }else{
            dP4pRefPrice = Math.random()*iTmp;
            }
            info2.setP4pRefPrice(dP4pRefPrice);
            list.add(info2);
            }
           
            }
            
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  //建立输入流  
 
return list;
}
//关键词及类型分析
public Map<String,String> getKeyWordAndWordType(String name){
Map<String, String> map = new HashMap<String, String>();
int endIndex= name.lastIndexOf("-");
//不好判断起始位置,但标题格式固定,现在写死
String subStr = name.substring(29, endIndex);
int index2 = subStr.lastIndexOf("-");
String keyWord = subStr.substring(0,index2).replace("-", "/");
String wordType = subStr.substring(index2+1);
String type = "0";
if(wordType!=null && !"".equals(wordType)){
if("热搜搜索词".equals(wordType)){
type = "0";
}else if("热搜长尾词".equals(wordType)){
type="1";
}else if("热搜核心词".equals(wordType)){
type="2";
}else if("热搜修饰词".equals(wordType)){
type="3";
}
}
map.put("keyWord", keyWord);
map.put("wordType", type);

return map;
}
}
Java可以使用Apache POI库来实现将xls文件导入数据库的功能。 首先,你需要在代码中引入Apache POI库的依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.1</version> </dependency> ``` 接着,你需要编写导入功能的代码。首先,你需要创建一个Workbook对象,它可以代表整个Excel文件。你可以使用WorkbookFactory工具类的create方法来创建Workbook对象: ``` File file = new File("path/to/your/excel/file.xls"); Workbook workbook = WorkbookFactory.create(file); ``` 然后,你需要选择Excel文件中的一个Sheet,可以使用getSheet方法来选择: ``` Sheet sheet = workbook.getSheetAt(0); ``` 接下来,你可以使用遍历的方式读取Sheet中的每一行,并将数据存储到数据库中。例如,可以通过每一行的getCell方法来获取每个单元格的数据,并将其插入到数据库中: ``` for (Row row : sheet) { Cell cell1 = row.getCell(0); Cell cell2 = row.getCell(1); // 获取单元格数据并插入数据库 String value1 = cell1.getStringCellValue(); String value2 = cell2.getStringCellValue(); // 将value1和value2插入数据库 } ``` 最后,记得在代码结束时关闭Workbook对象: ``` workbook.close(); ``` 以上就是使用Javaxls文件导入数据库的基本步骤。当然,你还可以根据具体需求对代码进行优化和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值