Java文件上传一般使用FtpClient进行操作,前后端使用MultipartFile 交互
Poi对excel文件进行读写操作, 因excel分为 office2003("新建 Microsoft Excel 工作表.xls)和2007两个版本(“新建 Microsoft Excel 工作表.xlsx”),针对两种文件创建不同 Workbook,Workbook是XSSFWorkbook(2007)和HSSFWorkbook(2003)的父类 ,
1、在使用poi进行操作,先创建Workbook,
2、然后根据Workbook获取不同的sheet表,
3、再在sheet表中获取Row, row相当于每一个excel的一行
4、 再根据row,getCell(index),cell相当于每一行的一个表格单元
org.apache.poi poi 3.9 org.apache.poi poi-ooxml 3.9 org.apache.xmlbeans xmlbeans 2.4.0
commons-net commons-net 3.2
@Data
public Class S{
private Stirng A;
private Stirng B;
}
根据controlle层 传入的MultipartFile fiel,获取InputStream 和fielName
FileInputStream fileInputStream = file.getInputStream();
String srcname = file.getOriginalFilename();
srcName可以根据后缀进行判断是属于那个版本的excel
public static boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
}
public static boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
}
针对输入的file转换成响应类型的List
public List read(InputStream inputStream,String fileName){
Workbook workbook = null;
/** 判断文件的类型,是2003还是2007 */
if(isExcel2007(fileName)){
workbook = new XSSFWorkbook(inputStream);
}else{
workbook = new HSSFWorkbook(inputStream);
}
List
3、根据List生成表格数据并上传服务器
ftp文件上传工具方法
public static boolean uploadFile(
String url,//FTP服务器hostname
int port,//FTP服务器端口
String username, // FTP登录账号
String password, //FTP登录密码
String path, //FTP服务器保存目录
String filename, //上传到FTP服务器上的文件名
InputStream input // 输入流
) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(url, port);//连接FTP服务器
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);//登录
reply = ftp.getReplyCode();
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
log.info("FTP服务器 拒绝连接");
return success;
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input);
input.close();
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
将LIst
List list ;
public InputStream getFailedExcels(List list) {
XSSFWorkbook wb = new XSSFWorkbook();
//创建HSSFSheet对象
XSSFSheet sheet = wb.createSheet();
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue("单元格中的中文");
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i);
XSSFCell cell0 = row.createCell(0);
if(list.get(i).getPhone()!=null){
cell0.setCellValue(list.get(i).getA());
}
XSSFCell cell1 = row.createCell(1);
if(list.get(i).getApplicatRoleId()!=null){
cell1.setCellValue(list.get(i).getB());
}
XSSFCell cell2 = row.createCell(2);
if(list.get(i).getApplicatContent()!=null){
cell2.setCellValue(list.get(i).getApplicatContent());
}
}
String url = "";
ByteArrayInputStream in = null;
//输出Excel文件
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
wb.write(os);
byte[] b = os.toByteArray();
in = new ByteArrayInputStream(b);
String filename = new Date().getTime()+"role.xlsx";
// url = ossUtil.getOSSUrl(in, "copy-right/", filename);
log.info("export failedExcel end ...... result"+url );
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return in;
}
//使用上面的 uploadFile()方法上传获取到inputStream
this.uploadFile(urlip,22,user,name,path,inputStream,filename);