1. 程式人生 > 實用技巧 >java 生成本地xsl excecl 檔案,並上傳ftp

java 生成本地xsl excecl 檔案,並上傳ftp


import com.bit.bpc.extend.report.client.api.MsaApiFeignClient;
import com.bit.bpc.extend.report.client.api.model.GroupUserVO;
import com.bit.bpc.extend.report.emos.model.fault.EmosFaultProcessInfo;
import com.bit.bpc.extend.report.emos.repository.fault.EmosFaultProcessInfoMapper;
import com.bit.bpc.extend.report.emos.service.fault.dwftp.FTPTools;
import com.bit.bpc.extend.report.emos.service.fault.dwftp.FaultOrderNum;
import com.bit.bpc.extend.report.utils.DateUtils;
import com.bit.bpc.extend.report.utils.FeignResultUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.*;
import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Properties;

/**
* @author ljk
* @version 1.0
* @date 2020/11/11 19:27
*/
@Component
public class testFtp {

@Autowired
MsaApiFeignClient msaApiFeignClient ;
@Autowired
private EmosFaultProcessInfoMapper processInfoMapper;

/////////////////////////////////////////////////////////////////////////////////////
private static final Logger log = LoggerFactory.getLogger(FaultOrderNum.class);

//@Scheduled(cron="*/15 * * * * ?") //每15秒 執行一次
public boolean sendExcelsFtp() throws IOException {
//String fileName="/opt/bit/bpc/servers/bit-bpc-extend-report/01002_"+ DateUtils.getCurrentDateDate()+".xsl";
String fileName="d:\\01001_"+ DateUtils.getCurrentDateDate()+".xsl";

Properties pro = System.getProperties();
System.out.println("當前編碼格式:"+pro.getProperty("file.encoding"));

//列頭
String[] headers = {"人員手機號","人員唯一標識","姓名","地市","區縣","時間","專業","處理故障數"};

HSSFWorkbook wb = new HSSFWorkbook();
// 生成一個表格
HSSFSheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(headers[i]);
}
//List<GroupUserVO> groupUsers = FeignResultUtils.msaResult(msaApiFeignClient.getGroupUsersByGroupId(group.getGroup_id()));
List<EmosFaultProcessInfo> listmaps = processInfoMapper.getdaiweiOrder();
log.info("listmaps.size : "+listmaps.size());

EmosFaultProcessInfo processInfo=null;
//寫入資料
for (int j=0;j<listmaps.size(); j++){
row = sheet.createRow(j+1);
processInfo = listmaps.get(j);
List<GroupUserVO> groupUsers = FeignResultUtils.msaResult(msaApiFeignClient.getGroupUsersByGroupId(processInfo.getDaiweiGroupId()));
GroupUserVO groupUserVO = groupUsers.get(1);

row.createCell(0).setCellValue(groupUserVO.getMobile());
row.createCell(1).setCellValue(groupUserVO.getUserAccount());
row.createCell(2).setCellValue(groupUserVO.getUserName());
row.createCell(3).setCellValue(processInfo.getRegion());
row.createCell(4).setCellValue(processInfo.getCountry());
row.createCell(5).setCellValue(processInfo.getProcessCreateTime());
row.createCell(6).setCellValue(processInfo.getNetClassOne());
row.createCell(7).setCellValue(processInfo.getId()); //總數


/*row.createCell(0).setCellValue("groupUserVO.getUserAccount()");
row.createCell(1).setCellValue("groupUserVO.getUserName()");
row.createCell(2).setCellValue("processInfo.getRegion()");
row.createCell(3).setCellValue("processInfo.getCountry()");
row.createCell(4).setCellValue("processInfo.getProcessCreateTime()");
row.createCell(5).setCellValue("總數");
row.createCell(6).setCellValue("中文"); //總數*/
}

for (int i = 0; i < headers.length; i++) {
sheet.autoSizeColumn(i);
}
File file = new File(fileName);
try {
if(file.exists()){
// 檔案存在
log.info("檔案已存在>>>>>>>>:"+fileName);
return false;
}

/*OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
wb.write(oStreamWriter);
Writer append = oStreamWriter.append();
oStreamWriter.close();*/

//輸出Excel檔案1
FileOutputStream output=new FileOutputStream(fileName);
wb.write(output);//寫入磁碟
output.close();

}catch (Exception e){
System.out.println(e.getMessage());
}finally {
wb.close();
}

CSVUtil csvUtil = new CSVUtil();
csvUtil.uploadFile();

//file.delete();
return true;
}
}






import com.bit.bpc.extend.report.utils.DateUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.beans.BeanUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.*;

/**
* @author ljk
* @version 1.0
* @date 2020/11/11 17:56
*/
public class CSVUtil {
//ftp伺服器地址
public String hostname = "";
//ftp伺服器埠號預設為21
public Integer port = 21 ;
//ftp登入賬號
public String username = "inspurftp";
//ftp登入密碼
public String password = "inspurftp#238";

public FTPClient ftpClient = null;

/**
* 初始化ftp伺服器
*/
public void initFtpClient() {
ftpClient = new FTPClient();
ftpClient.setControlEncoding("utf-8");
try {
System.out.println("connecting...ftp伺服器:"+this.hostname+":"+this.port);
ftpClient.connect(hostname, port); //連線ftp伺服器
ftpClient.login(username, password); //登入ftp伺服器
int replyCode = ftpClient.getReplyCode(); //是否成功登入伺服器
if(!FTPReply.isPositiveCompletion(replyCode)){
System.out.println("connect failed...ftp伺服器:"+this.hostname+":"+this.port);
}
System.out.println("connect successfu...ftp伺服器:"+this.hostname+":"+this.port);
}catch (Exception e) {
e.printStackTrace();
}
}

/**
* 上傳檔案
//* @param pathname ftp服務儲存地址
//* @param fileName 上傳到ftp的檔名
//* @param originfilename 待上傳檔案的名稱(絕對地址) *
* @return
*/
//public boolean uploadFile( String pathname, String fileName,String originfilename){
public boolean uploadFile(){

String pathname="/eoms_data";
String fileName="01001_"+ DateUtils.getCurrentDateDate()+".csv";
//String originfilename="\\opt\\bit\\bpc\\servers\\bit-bpc-extend-report";
String originfilename="/opt/bit/bpc/servers/bit-bpc-extend-report/";

boolean flag = false;
InputStream inputStream = null;
try{
System.out.println("開始上傳檔案");
inputStream = new FileInputStream(new File(originfilename+fileName));
initFtpClient();
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
CreateDirecroty(pathname);
ftpClient.makeDirectory(pathname);
ftpClient.changeWorkingDirectory(pathname);
ftpClient.storeFile(fileName, inputStream);
inputStream.close();
ftpClient.logout();
flag = true;
System.out.println("上傳檔案成功");
}catch (Exception e) {
System.out.println("上傳檔案失敗");
e.printStackTrace();
}finally{
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
if(null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
/**
* 上傳檔案
* @param pathname ftp服務儲存地址
* @param fileName 上傳到ftp的檔名
* @param inputStream 輸入檔案流
* @return
*/
public boolean uploadFile( String pathname, String fileName,InputStream inputStream){
boolean flag = false;
try{
System.out.println("開始上傳檔案");
initFtpClient();
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
CreateDirecroty(pathname);
ftpClient.makeDirectory(pathname);
ftpClient.changeWorkingDirectory(pathname);
ftpClient.storeFile(fileName, inputStream);
inputStream.close();
ftpClient.logout();
flag = true;
System.out.println("上傳檔案成功");
}catch (Exception e) {
System.out.println("上傳檔案失敗");
e.printStackTrace();
}finally{
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
if(null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
//改變目錄路徑
public boolean changeWorkingDirectory(String directory) {
boolean flag = true;
try {
flag = ftpClient.changeWorkingDirectory(directory);
if (flag) {
System.out.println("進入資料夾" + directory + " 成功!");

} else {
System.out.println("進入資料夾" + directory + " 失敗!開始建立資料夾");
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return flag;
}

//建立多層目錄檔案,如果有ftp伺服器已存在該檔案,則不建立,如果無,則建立
public boolean CreateDirecroty(String remote) throws IOException {
boolean success = true;
String directory = remote + "/";
// 如果遠端目錄不存在,則遞迴建立遠端伺服器目錄
if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) {
int start = 0;
int end = 0;
if (directory.startsWith("/")) {
start = 1;
} else {
start = 0;
}
end = directory.indexOf("/", start);
String path = "";
String paths = "";
while (true) {
String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");
path = path + "/" + subDirectory;
if (!existFile(path)) {
if (makeDirectory(subDirectory)) {
changeWorkingDirectory(subDirectory);
} else {
System.out.println("建立目錄[" + subDirectory + "]失敗");
changeWorkingDirectory(subDirectory);
}
} else {
changeWorkingDirectory(subDirectory);
}

paths = paths + "/" + subDirectory;
start = end + 1;
end = directory.indexOf("/", start);
// 檢查所有目錄是否建立完畢
if (end <= start) {
break;
}
}
}
return success;
}

//判斷ftp伺服器檔案是否存在
public boolean existFile(String path) throws IOException {
boolean flag = false;
FTPFile[] ftpFileArr = ftpClient.listFiles(path);
if (ftpFileArr.length > 0) {
flag = true;
}
return flag;
}
//建立目錄
public boolean makeDirectory(String dir) {
boolean flag = true;
try {
flag = ftpClient.makeDirectory(dir);
if (flag) {
System.out.println("建立資料夾" + dir + " 成功!");

} else {
System.out.println("建立資料夾" + dir + " 失敗!");
}
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}

/** * 下載檔案 *
* @param pathname FTP伺服器檔案目錄 *
* @param filename 檔名稱 *
* @param localpath 下載後的檔案路徑 *
* @return */
public boolean downloadFile(String pathname, String filename, String localpath){
boolean flag = false;
OutputStream os=null;
try {
System.out.println("開始下載檔案");
initFtpClient();
//切換FTP目錄
ftpClient.changeWorkingDirectory(pathname);
FTPFile[] ftpFiles = ftpClient.listFiles();
for(FTPFile file : ftpFiles){
if(filename.equalsIgnoreCase(file.getName())){
File localFile = new File(localpath + "/" + file.getName());
os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os);
os.close();
}
}
ftpClient.logout();
flag = true;
System.out.println("下載檔案成功");
} catch (Exception e) {
System.out.println("下載檔案失敗");
e.printStackTrace();
} finally{
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
if(null != os){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}

/** * 刪除檔案 *
* @param pathname FTP伺服器儲存目錄 *
* @param filename 要刪除的檔名稱 *
* @return */
public boolean deleteFile(String pathname, String filename){
boolean flag = false;
try {
System.out.println("開始刪除檔案");
initFtpClient();
//切換FTP目錄
ftpClient.changeWorkingDirectory(pathname);
ftpClient.dele(filename);
ftpClient.logout();
flag = true;
System.out.println("刪除檔案成功");
} catch (Exception e) {
System.out.println("刪除檔案失敗");
e.printStackTrace();
} finally {
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
}
return flag;
}

public static void main(String[] args) {
CSVUtil ftp =new CSVUtil();
//ftp.uploadFile("ftpFile/data", "123.docx", "E://123.docx");
//ftp.downloadFile("ftpFile/data", "123.docx", "F://");
ftp.deleteFile("ftpFile/data", "123.docx");
System.out.println("ok");
}

}