import sun.net.ftp.*;
import sun.net.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* 使用sun.net.ftp工具包进行ftp上传下载
*/
public class FtpTool {
String ip;
int port;
String user;
String pwd;
String remotePath;
String localPath;
FtpClient ftpClient;
/**
* 连接ftp服务器
*
* @param ip
* @param port
* @param user
* @param pwd
* @return
* @throws Exception
*/
public boolean connectServer(String ip, int port, String user, String pwd)
throws Exception {
boolean isSuccess = false;
try {
ftpClient = new FtpClient();
ftpClient.openServer(ip, port);
ftpClient.login(user, pwd);
isSuccess = true;
} catch (Exception ex) {
throw new Exception("Connect ftp server error:" + ex.getMessage());
}
return isSuccess;
}
/**
* 下载文件
*
* @param remotePath
* ftp文件夹路径
* @param localPath
* 下载到本地路径
* @param filename
* ftp文件名称
* @throws Exception
*/
public void downloadFile(String remotePath, String localPath,
String filename) throws Exception {
try {
if (connectServer(getIp(), getPort(), getUser(), getPwd())) {
// 创建文件夹
java.io.File myFilePath = new java.io.File(localPath);
if (!myFilePath.isDirectory()) {
myFilePath.mkdir();
}
if (remotePath.length() != 0)
ftpClient.cd(remotePath);
ftpClient.binary();
TelnetInputStream is = ftpClient.get(filename);
File file_out = new File(localPath + File.separator + filename);
FileOutputStream os = new FileOutputStream(file_out);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
ftpClient.closeServer();
}
} catch (Exception ex) {
throw new Exception("ftp download file error:" + ex.getMessage());
}
}
/**
* 上传文件
*
* @param remotePath
* @param localPath
* @param filename
* @throws Exception
*/
public void uploadFile(String remotePath, String localPath, String filename)
throws Exception {
try {
if (connectServer(getIp(), getPort(), getUser(), getPwd())) {
if (remotePath.length() != 0)
ftpClient.cd(remotePath);
ftpClient.binary();
TelnetOutputStream os = ftpClient.put(filename);
File file_in = new File(localPath + File.separator + filename);
FileInputStream is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
ftpClient.closeServer();
}
} catch (Exception ex) {
throw new Exception("ftp upload file error:" + ex.getMessage());
}
}
/**
* @return
*/
public String getIp() {
return ip;
}
/**
* @return
*/
public int getPort() {
return port;
}
/**
* @return
*/
public String getPwd() {
return pwd;
}
/**
* @return
*/
public String getUser() {
return user;
}
/**
* @param string
*/
public void setIp(String string) {
ip = string;
}
/**
* @param i
*/
public void setPort(int i) {
port = i;
}
/**
* @param string
*/
public void setPwd(String string) {
pwd = string;
}
/**
* @param string
*/
public void setUser(String string) {
user = string;
}
/**
* @return
*/
public FtpClient getFtpClient() {
return ftpClient;
}
/**
* @param client
*/
public void setFtpClient(FtpClient client) {
ftpClient = client;
}
/**
* @return
*/
public String getRemotePath() {
return remotePath;
}
/**
* @param string
*/
public void setRemotePath(String string) {
remotePath = string;
}
/**
* @return
*/
public String getLocalPath() {
return localPath;
}
/**
* @param string
*/
public void setLocalPath(String string) {
localPath = string;
}
/**
*
* 取得指定目录下的所有文件列表,包括子目录.
*
* @param baseDir
* File 指定的目录
*
* @return 包含java.io.File的List
*
*/
private static List<File> getSubFiles(File baseDir) {
List<File> ret = new ArrayList<File>();
File[] tmp = baseDir.listFiles();
for (int i = 0; i < tmp.length; i++) {
if (tmp[i].isFile())
ret.add(tmp[i]);
if (tmp[i].isDirectory())
ret.addAll(getSubFiles(tmp[i]));
}
return ret;
}
/**
*
* 给定根目录,返回一个相对路径所对应的实际文件名.
*
* @param zippath
* 指定根目录
*
* @param absFileName
* 相对路径名,来自于ZipEntry中的name
*
* @return java.io.File 实际的文件
*
*/
private static File getRealFileName(String zippath, String absFileName) {
String[] dirs = absFileName.split("/", absFileName.length());
File ret = new File(zippath);// 创建文件对象
if (dirs.length > 1) {
for (int i = 0; i < dirs.length - 1; i++) {
ret = new File(ret, dirs[i]);
}
}
if (!ret.exists()) {// 检测文件是否存在
ret.mkdirs();// 创建此抽象路径名指定的目录
}
ret = new File(ret, dirs[dirs.length - 1]);// 根据 ret 抽象路径名和 child
// 路径名字符串创建一个新 File 实例
return ret;
}
/**
*
* 取得ftp服务器上某个目录下的所有文件名
*
* @param ftp,
* FtpClient类实例; folderName,服务器的文件夹名
*
* @throws Exception
*
* @return list 某目录下文件名列表
*
*/
private List getServerFileNameList(FtpClient ftp, String folderName)
throws Exception {
BufferedReader dr = new BufferedReader(new InputStreamReader(ftp
.nameList(folderName)));
List<String> list = new ArrayList<String>();
String s;
while ((s = dr.readLine()) != null) {
list.add(s);
}
return list;
}
public static void main(String[] args) throws Exception {
FtpTool tt = new FtpTool();
boolean bb = tt.connectServer("195.205.1.2", 21, "ftppub", "ftppub");
System.out.println(bb);
tt.ip = "195.205.1.2";
tt.port = 21;//端口号
tt.user = "ftppub";
tt.pwd = "ftppub";
// tt.downloadFile("/opt/up/20100810/","E:/ftp","SEQNO_20100810.zip");
tt.downloadFile("/opt/up/20100810/", "E:/ftp/oppt",
"DIR.SEQNO_20100810.txt");
/*
* List list =
* tt.getServerFileNameList(tt.ftpClient,"/opt/up/20100810/SEQNO_20100810.zip");
* for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); }
*/
}
}
分享到:
相关推荐
FTP上传下载文件
windows c++简单的 ftp上传下载
一个支持FTP上传下载的类。 支持窗口显示和线程控制
关于VC++ FTP上传下载的操作 包含有XML文件操作类
ftp上传下载工具上传下载工具ftp上传下载工具ftp上传下载工具ftp上传下载工具ftp上传下载工具ftp上传下载工具ftp上传下载工具ftp上传下载工具ftp
ftp上传下载器
VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效编程 99 FTP上传下载VisualC 实效...
ftp上传下载 linux环境下程序 网络高级程序设计课程实验
qt ftp上传下载。博客地址 https://blog.csdn.net/sinat_33859977/article/details/99564157
利用C# 实现ftp上传下载 文件 文件夹等操作
用纯VB API实现的FTP上传下载的类,可以指下载,上传有进度控制,在公司里以应用相当长时间,比较稳定。代码结构清晰,附带一调用示例。
ftp上传下载java代码,代码完整 都是自己编写的
FTP上传下载 C#源代码,建议大家下载看一下再评论FTP上传下载 C#源代码,建议大家下载看一下再评论
FTP上传下载的实现,网络编程 FTP SOCKET MFC 网络
FlashXP+FTP上传下载工具破解版
ftp上传下载的好工具 已经是破解的了 不需要注册 你只需要连接自己的ftp就可以了 剩下的就不用说了吧
12.FTP上传下载文件演示(Visual C++编程 源代码)12.FTP上传下载文件演示(Visual C++编程 源代码)12.FTP上传下载文件演示(Visual C++编程 源代码)12.FTP上传下载文件演示(Visual C++编程 源代码)12.FTP上传...
FTP上传下载,上传文件的类型及文件大小都放到调用此类的方法中去检测,比如放到前台JAVASCRIPT中去检测等
本程序在VS2010环境下进行开发,程序用C# WinForm实现了FTP上传下载(可实现上传所选目录下的所有文件)并带上传进度条,程序会在运行根目录下自动生成日志文件以方便查看信息...本程序主要由socket进行通信...程序由...
curl实现ftp上传下载,vs版本实现,可以使用