概述
上次写了一篇读取文件复制到指定文件夹下的文章
本次是从ftp读取,然后复制到指定文件夹下,代码都差不多,不知道ftp怎么发布的,自行百度一下,教程很多,下面文件读取贴代码
/**
* 登陆FTP服务器
*
* @param host FTPServer IP地址
* @param port FTPServer 端口
* @param userName FTPServer 登陆用户名
* @param password FTPServer 登陆密码
* @return FTPClient
* @throws IOException
*/
public static FTPClient login(String host, String port, String userName, String password) throws IOException{
FTPClient ftpClient = new FTPClient();
// 防止中文目录乱码
ftpClient.setAutodetectUTF8(true);
ftpClient.setConnectTimeout(60000);
// 连接FTP服务器
ftpClient.connect(host, Integer.valueOf(port));
if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
// 登陆FTP服务器
if (ftpClient.login(userName, password)) {
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
"OPTS UTF8", "ON"))) {
ftpClient.setControlEncoding("UTF-8");
}else {
ftpClient.setControlEncoding("GBK");
}
// 设置传输的模式,以二进制流的方式读取
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
log.info("FTP服务连接成功!");
}else {
log.error("FTP服务用户名或密码错误!");
disConnection(ftpClient);
}
}else {
log.error("连接到FTP服务失败!");
disConnection(ftpClient);
}
return ftpClient;
}
/**
* 关闭FTP服务链接
* @throws IOException
*/
private static void disConnection(FTPClient ftpClient) throws IOException {
if(null != ftpClient && ftpClient.isConnected()){
ftpClient.disconnect();
}
}
下面是文件读取,参考了哪位大哥也忘了,自己加了一些删除和判断
@Value("${file.uploadFolder}")
private String uploadFolder; //读取后存放文件的文件夹
@Value("${ftp.server.fileUrl}")
private String ftpFolder; //ftp文件夹
@Value("${ftp.server.userName}")
private String userName; //ftp用户名
@Value("${ftp.server.password}")
private String password; //ftp密码
@Value("${ftp.server.host}")
private String ftpServer; //ftp主机ip
@Value("${ftp.server.port}")
private String ftpPort; //ftp端口号
/**
* 得到所有路径以及子路径:递归遍历所有文件到路径。
* @param ftp FTPClient对象
* @param path 当前的路径
* @param pathArray 保存当前的路径并将此路径集合带到下载方法中去
* @throws IOException
*/
public void getPath(FTPClient ftp, String path, ArrayList<String> pathArray) throws IOException{
FTPFile[] files = ftp.listFiles();
for (FTPFile ftpFile : files) {
if(ftpFile.getName().equals(".")||ftpFile.getName().equals(".."))continue;
if(ftpFile.isDirectory()){//如果是目录,则递归调用,查找里面所有文件
path+="/"+ftpFile.getName();
pathArray.add(path);
ftp.changeWorkingDirectory(path);//改变当前路径
getPath(ftp,path,pathArray);//递归调用
path=path.substring(0, path.lastIndexOf("/"));//避免对之后的同目录下的路径构造作出干扰,
}
}
}
/**
* 下载到指定的本地文件夹中
* @param ftp FTPClient对象
* @param pathArray 为1中带出的路径集合
* @param localRootPath 本地路径
* @throws IOException
*/
public void download(FTPClient ftp,ArrayList<String> pathArray,String localRootPath) throws IOException{
//日期目录
//String dateString = ym.dateTime();
for (String string : pathArray) {
String localPath=localRootPath+string;
File localFile = new File(localPath);
if (!localFile.exists()) {
localFile.mkdirs();
}
}
for (String string : pathArray) {
String localPath=localRootPath+string;//构造本地路径
ftp.changeWorkingDirectory(string);
FTPFile[] file=ftp.listFiles();
for (FTPFile ftpFile : file) {
if(ftpFile.getName().equals(".")||ftpFile.getName().equals(".."))continue;
File localFile = new File(localPath);
if(!ftpFile.isDirectory()){
File fileCheck = new File(localFile+"/" + ftpFile.getName());
//文件已存在不需要下载
if (fileCheck.exists()) {
System.out.println(localFile+"/" + ftpFile.getName() + " 文件已存在。");
continue;
}
OutputStream is = new FileOutputStream(localFile + "/" + ftpFile.getName());
ftp.retrieveFile(ftpFile.getName(), is);
is.close();
//删除源文件,先注释,看后期需不需要放开
/*File fileOld = new File(ftpFolder + dateString + "/" + ftpFile.getName());
if (fileOld.exists()){
fileOld.delete();
}else {
System.out.println("文件不存在");
}*/
//删除源文件,先注释,看后期需不需要放开
/*ftp.deleteFile(ftpFolder + dateString + "/" + ftpFile.getName());*/
}
}
}
}
@PostMapping("/test")
public void ceshi() throws IOException {
FTPClient ftpClient = FtpUtils.login(ftpServer,ftpPort,userName,password);
String path="";
ArrayList pathArray=new ArrayList();
getPath(ftpClient,path,pathArray);
//System.out.println(pathArray);
download(ftpClient, pathArray, uploadFolder);
ftpClient.logout();
ftpClient.disconnect();
}
就这样,完结,撒花~
最后
以上就是内向雪碧为你收集整理的从ftp读取文件,存到指定文件夹下的全部内容,希望文章能够帮你解决从ftp读取文件,存到指定文件夹下所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复