关于用java搭建FTP服务器 下载远端Linux系统下文件的一些问题

a872728984 2013-01-24 07:23:50
前提是这样的:我们每天都需要远端一台服务器上的数据,那台服务器姑且叫做B吧,B是Linux操作系统,而本地A是windows,现在用java在A上搭建一个FTP服务器,说白了也就是用java语言写一个FTP客户端,实现对远端数据的下载。。。。这两天找找资料给弄出来了,因为windows对windows和windows对Linux还不一样,所以代码都点乱,不过功能可以实现
平时工作需要的程序猿们可以拿去参考一下,,另外就是请各位批评指正,把代码优化改善一下子。。。谢了....
代码:
package com.mcm.socket.ftp; import java.io.File;
import java.io.FileOutputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FtpDownload{
public static FTPClient ftpClient =new FTPClient();
public static String encoding =System.getProperty("file.encoding");

public static boolean download(String url,int port,String username,
String password,String localPath,String remotePath){
boolean result =false;
int reply;
try{
ftpClient.setControlEncoding(encoding);//
ftpClient.connect(url,port);//建立连接
ftpClient.login(username, password);//登录
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//编码格式
reply = ftpClient.getReplyCode();//答应码
//验证是否登录成功
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
System.err.println("FTP server refused connection.");

}
}catch(Exception e){
e.printStackTrace();
}


FileOutputStream outStream = null;
FTPFile[] list = null;

try{
list = ftpClient.listFiles(remotePath);
File temp = null;
for (int i = 0; i < list.length; i++) {
// 如果是文件,则直接执行下载
if (list[i].isFile()) {
ftpClient.changeWorkingDirectory(remotePath);
String fileName = list[i].getName();
temp = new File(localPath + File.separator + fileName);
outStream = new FileOutputStream(temp);
boolean isDownload = ftpClient.retrieveFile(fileName, outStream);//判断是目录还是文件
outStream.close();
if(isDownload==true){}
}

else if (list[i].isDirectory())// 是目录
{
temp = new File(localPath + File.separator + list[i].getName());
temp.mkdirs();
//String newRemote = remotePath + File.separator + list[i].getName();
}
}
}catch(Exception e){
e.printStackTrace();
}finally {
try{
outStream.close();
}catch(Exception e){
e.printStackTrace();
}
}
return result;
}

//关闭连接
public void closeFtpConn(){
try{
if(ftpClient.isConnected()||ftpClient != null){
ftpClient.disconnect();
}
ftpClient = null;
}catch(Exception e){
e.printStackTrace();
}
}

//下载
public void downloadFiles(){
try{
FTPClientConfig config=new FTPClientConfig(FTPClientConfig.SYST_UNIX);
ftpClient.configure(config);

download("目的主机IP",21,"用户名","密码","F:/temp/jituanhecha/","/20130124");
//目的主机就是远端服务器的IP,用户名密码就是登陆FTP的账号密码,本地目录,远端目录(这有个问题:怎么把远端目录设置成动态的,因为远端目录他是按时间生成的文件名???)
}catch(Exception e){
e.printStackTrace();
}

}

//主函数

public static void main(String[] args){
FtpDownload ftpdown=new FtpDownload();
ftpdown.downloadFiles();
}

}
...全文
298 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈不沉0516 2014-10-10
  • 打赏
  • 举报
回复
楼主可以把上传代码还有windows对linux的代码贴出来吗!
陈不沉0516 2014-10-10
  • 打赏
  • 举报
回复
赞一个!我现在是windows搭建FTP服务器,linux客户端!mark!
a872728984 2013-01-30
  • 打赏
  • 举报
回复
远端动态目录已经生成 可以把系统日期在java中设置成‘YYYYMMDD’的格式 然后把这个字符串复制给一个变量 再把这个变量赋值给目录就OK了
a872728984 2013-01-24
  • 打赏
  • 举报
回复
现在问题就是 1.代码有点乱 2.日志什么的都没有做 3.考虑把远端下载目录设置成动态的,一起努力吧

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧