这个正好用在我的工作中,所以必须要转
一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法、下载文件的通用方法以及删除文件、在ftp服务器上穿件文件夹、检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码:
package ftpDemo;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class ftpUtil {
// 上传文件至FTP通用方法
public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
TelnetOutputStream telnetOut = ftpClient.put(fileName);// fileName为上传的文件名
DataOutputStream dataOut = new DataOutputStream(telnetOut);
byte buffer[] = new byte[ * ];
int count = ;
while ((count = is.read(buffer)) != -) {
dataOut.write(buffer, , count);
}
telnetOut.close();
dataOut.close();
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("上传文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
}
// 删除文件至FTP通用方法
public static void deleteFileFtp(KmConfig kmConfig,String fileName){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
try {
ftpClient.sendServer("dele " + fileName + "\r\n");
} catch (Exception e) {
System.out.println("删除文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("删除文件失败!");
}
}
// 下载ftp文件
public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
try {
TelnetInputStream in = ftpClient.get(fileName);
byte[] bytes = new byte[];
int cnt=;
while ((cnt=in.read(bytes,,bytes.length)) != -) {
outputStream.write(bytes, , cnt);
}
outputStream.close();
in.close();
} catch (Exception e) {
ftpClient.closeServer();
e.printStackTrace();
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("下载文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
}
//在ftp服务器上传件文件夹
public boolean createDir(String path,FtpClient ftpClient) throws Exception{
//进入到home文件夹下
ftpClient.cd("/home");
//创建远程文件夹
//远程命令包括
//USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br>
// PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br>
// ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br>
// REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br>
// QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br>
// 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n<br>
// ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令<br>
// ftpclient.readServerResponse一定要在sendServer后调用<br>
// nameList("/test")获取指目录下的文件列表<br>
// XMKD建立目录,当目录存在的情况下再次创建目录时报错<br>
// XRMD删除目录<br>
// DELE删除文件<br>
//通过远程命令 穿件一个files文件夹
ftpClient.sendServer("MKD "+ path + "\r\n");
//这个方法必须在 这两个方法中间调用 否则 命令不管用
ftpClient.binary();
ftpClient.readServerResponse();
return false;
}
/**
* 检查文件夹是否存在
* @param dir
* @param ftpClient
* @return
*/
public boolean isDirExist(String dir, FtpClient ftpClient) {
try {
ftpClient.cd(dir);
} catch (Exception e) {
return false;
}
return true;
}
}
package ftpDemo;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class ftpUtil {
// 上传文件至FTP通用方法
public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
TelnetOutputStream telnetOut = ftpClient.put(fileName);// fileName为上传的文件名
DataOutputStream dataOut = new DataOutputStream(telnetOut);
byte buffer[] = new byte[ * ];
int count = ;
while ((count = is.read(buffer)) != -) {
dataOut.write(buffer, , count);
}
telnetOut.close();
dataOut.close();
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("上传文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
}
// 删除文件至FTP通用方法
public static void deleteFileFtp(KmConfig kmConfig,String fileName){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
try {
ftpClient.sendServer("dele " + fileName + "\r\n");
} catch (Exception e) {
System.out.println("删除文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("删除文件失败!");
}
}
// 下载ftp文件
public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
try {
TelnetInputStream in = ftpClient.get(fileName);
byte[] bytes = new byte[];
int cnt=;
while ((cnt=in.read(bytes,,bytes.length)) != -) {
outputStream.write(bytes, , cnt);
}
outputStream.close();
in.close();
} catch (Exception e) {
ftpClient.closeServer();
e.printStackTrace();
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("下载文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
}
//在ftp服务器上传件文件夹
public boolean createDir(String path,FtpClient ftpClient) throws Exception{
//进入到home文件夹下
ftpClient.cd("/home");
//创建远程文件夹
//远程命令包括
//USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br>
// PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br>
// ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br>
// REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br>
// QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br>
// 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n<br>
// ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令<br>
// ftpclient.readServerResponse一定要在sendServer后调用<br>
// nameList("/test")获取指目录下的文件列表<br>
// XMKD建立目录,当目录存在的情况下再次创建目录时报错<br>
// XRMD删除目录<br>
// DELE删除文件<br>
//通过远程命令 穿件一个files文件夹
ftpClient.sendServer("MKD "+ path + "\r\n");
//这个方法必须在 这两个方法中间调用 否则 命令不管用
ftpClient.binary();
ftpClient.readServerResponse();
return false;
}
/**
* 检查文件夹是否存在
* @param dir
* @param ftpClient
* @return
*/
public boolean isDirExist(String dir, FtpClient ftpClient) {
try {
ftpClient.cd(dir);
} catch (Exception e) {
return false;
}
return true;
}
}
package ftpDemo;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class ftpUtil {
// 上传文件至FTP通用方法
public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
TelnetOutputStream telnetOut = ftpClient.put(fileName);// fileName为上传的文件名
DataOutputStream dataOut = new DataOutputStream(telnetOut);
byte buffer[] = new byte[ * ];
int count = ;
while ((count = is.read(buffer)) != -) {
dataOut.write(buffer, , count);
}
telnetOut.close();
dataOut.close();
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("上传文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
}
// 删除文件至FTP通用方法
public static void deleteFileFtp(KmConfig kmConfig,String fileName){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
try {
ftpClient.sendServer("dele " + fileName + "\r\n");
} catch (Exception e) {
System.out.println("删除文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("删除文件失败!");
}
}
// 下载ftp文件
public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
ftpClient.login(userName, passWord);// userName、passWord分别为FTP服务器的登陆用户名和密码
ftpClient.binary();
ftpClient.cd(path);// path为FTP服务器上保存上传文件的路径。
try {
TelnetInputStream in = ftpClient.get(fileName);
byte[] bytes = new byte[];
int cnt=;
while ((cnt=in.read(bytes,,bytes.length)) != -) {
outputStream.write(bytes, , cnt);
}
outputStream.close();
in.close();
} catch (Exception e) {
ftpClient.closeServer();
e.printStackTrace();
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("下载文件失败!请检查系统FTP设置,并确认FTP服务启动");
}
}
//在ftp服务器上传件文件夹
public boolean createDir(String path,FtpClient ftpClient) throws Exception{
//进入到home文件夹下
ftpClient.cd("/home");
//创建远程文件夹
//远程命令包括
//USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br>
// PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br>
// ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br>
// REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br>
// QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br>
// 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n<br>
// ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令<br>
// ftpclient.readServerResponse一定要在sendServer后调用<br>
// nameList("/test")获取指目录下的文件列表<br>
// XMKD建立目录,当目录存在的情况下再次创建目录时报错<br>
// XRMD删除目录<br>
// DELE删除文件<br>
//通过远程命令 穿件一个files文件夹
ftpClient.sendServer("MKD "+ path + "\r\n");
//这个方法必须在 这两个方法中间调用 否则 命令不管用
ftpClient.binary();
ftpClient.readServerResponse();
return false;
}
/**
* 检查文件夹是否存在
* @param dir
* @param ftpClient
* @return
*/
public boolean isDirExist(String dir, FtpClient ftpClient) {
try {
ftpClient.cd(dir);
} catch (Exception e) {
return false;
}
return true;
}
}
KmConfig.java代码如下:定义FTP服务器参数,包括登录的用户名密码之类的。
package ftpDemo;
public class KmConfig {
//主机ip
private String FtpHost = "";
//端口号
private int FtpPort;
//ftp用户名
private String FtpUser = "";
//ftp密码
private String FtpPassword = "";
//ftp中的目录
private String FtpPath = "";
public String getFtpHost() {
return FtpHost;
}
public void setFtpHost(String ftpHost) {
FtpHost = ftpHost;
}
public int getFtpPort() {
return FtpPort;
}
public void setFtpPort(int ftpPort) {
FtpPort = ftpPort;
}
public String getFtpUser() {
return FtpUser;
}
public void setFtpUser(String ftpUser) {
FtpUser = ftpUser;
}
public String getFtpPassword() {
return FtpPassword;
}
public void setFtpPassword(String ftpPassword) {
FtpPassword = ftpPassword;
}
public String getFtpPath() {
return FtpPath;
}
public void setFtpPath(String ftpPath) {
FtpPath = ftpPath;
}
}
package ftpDemo;
public class KmConfig {
//主机ip
private String FtpHost = "";
//端口号
private int FtpPort;
//ftp用户名
private String FtpUser = "";
//ftp密码
private String FtpPassword = "";
//ftp中的目录
private String FtpPath = "";
public String getFtpHost() {
return FtpHost;
}
public void setFtpHost(String ftpHost) {
FtpHost = ftpHost;
}
public int getFtpPort() {
return FtpPort;
}
public void setFtpPort(int ftpPort) {
FtpPort = ftpPort;
}
public String getFtpUser() {
return FtpUser;
}
public void setFtpUser(String ftpUser) {
FtpUser = ftpUser;
}
public String getFtpPassword() {
return FtpPassword;
}
public void setFtpPassword(String ftpPassword) {
FtpPassword = ftpPassword;
}
public String getFtpPath() {
return FtpPath;
}
public void setFtpPath(String ftpPath) {
FtpPath = ftpPath;
}
}
package ftpDemo;
public class KmConfig {
//主机ip
private String FtpHost = "";
//端口号
private int FtpPort;
//ftp用户名
private String FtpUser = "";
//ftp密码
private String FtpPassword = "";
//ftp中的目录
private String FtpPath = "";
public String getFtpHost() {
return FtpHost;
}
public void setFtpHost(String ftpHost) {
FtpHost = ftpHost;
}
public int getFtpPort() {
return FtpPort;
}
public void setFtpPort(int ftpPort) {
FtpPort = ftpPort;
}
public String getFtpUser() {
return FtpUser;
}
public void setFtpUser(String ftpUser) {
FtpUser = ftpUser;
}
public String getFtpPassword() {
return FtpPassword;
}
public void setFtpPassword(String ftpPassword) {
FtpPassword = ftpPassword;
}
public String getFtpPath() {
return FtpPath;
}
public void setFtpPath(String ftpPath) {
FtpPath = ftpPath;
}
}
下面是测试代码:
package ftpDemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
//设置ftp
KmConfig km = new KmConfig();
km.setFtpHost("...");
km.setFtpPort();
km.setFtpUser("test");
km.setFtpPassword("");
km.setFtpPath("KM");
//上传到ftp
ftpUtil util=new ftpUtil();
File file = new File("F:/文章.jpg");
InputStream in;
try {
in = new FileInputStream(file);
util.upLoadFileFtp(km, in, "更改后的名字.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package ftpDemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
//设置ftp
KmConfig km = new KmConfig();
km.setFtpHost("...");
km.setFtpPort();
km.setFtpUser("test");
km.setFtpPassword("");
km.setFtpPath("KM");
//上传到ftp
ftpUtil util=new ftpUtil();
File file = new File("F:/文章.jpg");
InputStream in;
try {
in = new FileInputStream(file);
util.upLoadFileFtp(km, in, "更改后的名字.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package ftpDemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
//设置ftp
KmConfig km = new KmConfig();
km.setFtpHost("...");
km.setFtpPort();
km.setFtpUser("test");
km.setFtpPassword("");
km.setFtpPath("KM");
//上传到ftp
ftpUtil util=new ftpUtil();
File file = new File("F:/文章.jpg");
InputStream in;
try {
in = new FileInputStream(file);
util.upLoadFileFtp(km, in, "更改后的名字.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}