import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import com.yufuSendMailToMrch.utils.DateUtil;
import com.yufuSendMailToMrch.utils.Mail;
import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpDirEntry;
import sun.net.ftp.FtpDirEntry.Type;
import sun.net.ftp.FtpProtocolException;
/**
* FTP工具类
*
* */
public class FTPUtils {
public static boolean createDir(String destDirName) {
File dir = new File(destDirName);
if (dir.exists()) {
System.out.println("创建目录" + destDirName + "失败,目标目录已经存在");
return false;
}
if (!destDirName.endsWith(File.separator)) {
destDirName = destDirName + File.separator;
}
//创建目录
if (dir.mkdirs()) {
System.out.println("创建目录 " + destDirName + " 成功!");
return true;
} else {
System.out.println("创建目录 " + destDirName + " 失败!");
return false;
}
}
public static void main(String[] args) {
try {
FtpClient ftp = connectFTP("192.168.10.75", 21, "ftpweb", "ftpweb");
String day=DateUtil.getDate("yyyyMMdd");
String localRoute="D://";
String todayPdfFileRoute="/home/ftpweb/fssystem_pdf/"+day+"/";
Iterator<FtpDirEntry> ftpFiles=ftp.listFiles(todayPdfFileRoute);
String receiveMail="";
String pdfRoute="";
//本地创建当天目录
createDir(localRoute+day);
while (ftpFiles.hasNext()) { //跳转到当天目录,读取商户目录
FtpDirEntry fe=ftpFiles.next();
List<File> pdfFiles=new ArrayList<File>();
String name=fe.getName();
if(name.contains("#")){
receiveMail=name.split("#")[1];
System.out.println("发送到邮箱:"+receiveMail);
}
System.out.println("当天目录:"+name+" type:"+fe.getType());
if(Type.DIR.equals(fe.getType())){//进入pdf文件夹目录,读取pdf
Iterator<FtpDirEntry> mrchPdf=ftp.listFiles(todayPdfFileRoute+name);
//本地创建当天商户目录
createDir(localRoute+day+"/"+name);
while (mrchPdf.hasNext()) {
FtpDirEntry pdf=mrchPdf.next();
if(Type.FILE.equals(pdf.getType())){
System.out.println("pdf文件夹目录:"+todayPdfFileRoute+name+"/"+pdf.getName()+" type:"+pdf.getType());
pdfRoute=todayPdfFileRoute+name+"/"+pdf.getName();
//下载ftp服务器pdf文件到本地
FTPUtils.download(localRoute+day+"/"+name+"/"+pdf.getName(), pdfRoute,ftp);
pdfFiles.add(new File(localRoute+day+"/"+name+"/"+pdf.getName()));
}
}
}
//给商户发送邮件
if(pdfFiles!=null&&pdfFiles.size()>0&&emailFormat(receiveMail)){
String[] receive = {receiveMail}; //接收方邮箱
Mail mail = new Mail("*******@163.com","**********",receive,RecipientType.TO, "交易流水("+DateUtil.getDate("yyyy-MM-dd HH:mm:ss")+")", "详情请查件附件!谢谢。",pdfFiles);
mail.send();
}
System.out.println("****************************");
}
ftp.close();
} catch (IOException e) {
e.printStackTrace();
} catch (FtpProtocolException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* 验证输入的邮箱格式是否符合
*
* @param email
* @return 是否合法
*/
public static boolean emailFormat(String email) {
boolean tag = true;
if (!email.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) {
tag = false;
}
return tag;
}
/**
* 获取FTP
*
* @param url
* @param port
* @param username
* @param password
* @return
*/
public static FtpClient connectFTP(String url, int port, String username,
String password) {
// 创建ftp
FtpClient ftp = null;
try {
// 创建地址
SocketAddress addr = new InetSocketAddress(url, port);
// 连接
ftp = FtpClient.create();
ftp.connect(addr);
// 登陆
ftp.login(username, password.toCharArray());
ftp.setBinaryType();
} catch (FtpProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ftp;
}
/**
* 上传本地文件到ftp服务器
*
* @param localFile
* 本地文件目录,如:d://1.txt
* @param ftpFile
* ftp服务器文件目录,如:/home/ftpweb/fssystem_pdf/1.txt
* @param ftp
*/
public static void upload(String localFile, String ftpFile, FtpClient ftp) {
OutputStream os = null;
FileInputStream fis = null;
try {
// 将ftp文件加入输出流中。输出到ftp上
os = ftp.putFileStream(ftpFile);
File file = new File(localFile);
// 创建一个缓冲区
fis = new FileInputStream(file);
byte[] bytes = new byte[1024];
int c;
while ((c = fis.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
System.out.println("upload success!!");
} catch (FtpProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 从ftp服务器下载文件到本地
*
* @param localFile
* @param ftpFile
* @param ftp
*/
public static void download(String localFile, String ftpFile, FtpClient ftp) {
InputStream is = null;
FileOutputStream fos = null;
try {
// 获取ftp上的文件
is = ftp.getFileStream(ftpFile);
File file = new File(localFile);
byte[] bytes = new byte[1024];
int i;
fos = new FileOutputStream(file);
while ((i = is.read(bytes)) != -1) {
fos.write(bytes, 0, i);
}
System.out.println("download success!!");
} catch (FtpProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
05-19
07-04
09-12