一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法、下载文件的通用方法以及删除文件、在ftp服务器上穿件文件夹、检 测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码:
001 |
package ftpDemo;
|
002 |
import java.io.DataOutputStream;
|
003 |
import java.io.InputStream;
|
004 |
import java.io.OutputStream;
|
005 |
import sun.net.TelnetInputStream;
|
006 |
import sun.net.TelnetOutputStream;
|
007 |
import sun.net.ftp.FtpClient;
|
008 |
public class ftpUtil {
|
009 | // 上传文件至FTP通用方法 |
010 |
public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){
|
011 |
try {
|
012 |
String ftpHost = kmConfig.getFtpHost();
|
013 |
int port = kmConfig.getFtpPort();
|
014 |
String userName = kmConfig.getFtpUser();
|
015 |
String passWord = kmConfig.getFtpPassword();
|
016 |
String path = kmConfig.getFtpPath();
|
017 |
FtpClient ftpClient = new FtpClient(ftpHost, port); // ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
|
018 |
ftpClient.login(userName, passWord); // userName、passWord分别为FTP服务器的登陆用户名和密码
|
019 |
ftpClient.binary();
|
020 |
ftpClient.cd(path); // path为FTP服务器上保存上传文件的路径。
|
021 |
TelnetOutputStream telnetOut = ftpClient.put(fileName); // fileName为上传的文件名
|
022 |
DataOutputStream dataOut = new DataOutputStream(telnetOut);
|
023 |
byte buffer[] = new byte [ 1024 * 1024 ];
|
024 |
int count = 0 ;
|
025 |
while ((count = is.read(buffer)) != - 1 ) {
|
026 |
dataOut.write(buffer, 0 , count);
|
027 |
}
|
028 |
telnetOut.close();
|
029 |
dataOut.close();
|
030 |
ftpClient.closeServer();
|
031 |
} catch (Exception e) {
|
032 |
System.out.println( "上传文件失败!请检查系统FTP设置,并确认FTP服务启动" );
|
033 |
}
|
034 | } |
035 | // 删除文件至FTP通用方法 |
036 |
public static void deleteFileFtp(KmConfig kmConfig,String fileName){
|
037 |
try {
|
038 |
String ftpHost = kmConfig.getFtpHost();
|
039 |
int port = kmConfig.getFtpPort();
|
040 |
String userName = kmConfig.getFtpUser();
|
041 |
String passWord = kmConfig.getFtpPassword();
|
042 |
String path = kmConfig.getFtpPath();
|
043 |
FtpClient ftpClient = new FtpClient(ftpHost, port); // ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
|
044 |
ftpClient.login(userName, passWord); // userName、passWord分别为FTP服务器的登陆用户名和密码
|
045 |
ftpClient.binary();
|
046 |
ftpClient.cd(path); // path为FTP服务器上保存上传文件的路径。
|
047 |
try {
|
048 |
ftpClient.sendServer( "dele " + fileName + "\r\n" );
|
049 |
} catch (Exception e) {
|
050 |
System.out.println( "删除文件失败!请检查系统FTP设置,并确认FTP服务启动" );
|
051 |
}
|
052 |
ftpClient.closeServer();
|
053 |
} catch (Exception e) {
|
054 |
System.out.println( "删除文件失败!" );
|
055 |
}
|
056 | } |
057 | // 下载ftp文件 |
058 |
public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){
|
059 |
try {
|
060 |
String ftpHost = kmConfig.getFtpHost();
|
061 |
int port = kmConfig.getFtpPort();
|
062 |
String userName = kmConfig.getFtpUser();
|
063 |
String passWord = kmConfig.getFtpPassword();
|
064 |
String path = kmConfig.getFtpPath();
|
065 |
FtpClient ftpClient = new FtpClient(ftpHost, port); // ftpHost为FTP服务器的IP地址,port为FTP服务器的登陆端口,ftpHost为String型,port为int型。
|
066 |
ftpClient.login(userName, passWord); // userName、passWord分别为FTP服务器的登陆用户名和密码
|
067 |
ftpClient.binary();
|
068 |
ftpClient.cd(path); // path为FTP服务器上保存上传文件的路径。
|
069 |
try {
|
070 |
TelnetInputStream in = ftpClient.get(fileName);
|
071 |
byte [] bytes = new byte [ 1024 ];
|
072 |
int cnt= 0 ;
|
073 |
while ((cnt=in.read(bytes, 0 ,bytes.length)) != - 1 ) {
|
074 |
outputStream.write(bytes, 0 , cnt);
|
075 |
}
|
076 |
outputStream.close();
|
077 |
in.close();
|
078 |
} catch (Exception e) {
|
079 |
ftpClient.closeServer();
|
080 |
e.printStackTrace();
|
081 |
}
|
082 |
ftpClient.closeServer();
|
083 |
} catch (Exception e) {
|
084 |
System.out.println( "下载文件失败!请检查系统FTP设置,并确认FTP服务启动" );
|
085 |
}
|
086 | } |
087 | //在ftp服务器上传件文件夹 |
088 |
public boolean createDir(String path,FtpClient ftpClient) throws Exception{
|
089 |
//进入到home文件夹下
|
090 |
ftpClient.cd( "/home" );
|
091 |
//创建远程文件夹
|
092 |
//远程命令包括
|
093 |
//USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br>
|
094 | // PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br> |
095 | // ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br> |
096 | // REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br> |
097 | // QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br> |
098 | // 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n<br> |
099 | // ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令<br> |
100 | // ftpclient.readServerResponse一定要在sendServer后调用<br> |
101 | // nameList("/test")获取指目录下的文件列表<br> |
102 | // XMKD建立目录,当目录存在的情况下再次创建目录时报错<br> |
103 | // XRMD删除目录<br> |
104 | // DELE删除文件<br> |
105 |
//通过远程命令 穿件一个files文件夹
|
106 |
ftpClient.sendServer( "MKD " + path + "\r\n" );
|
107 |
//这个方法必须在 这两个方法中间调用 否则 命令不管用
|
108 |
ftpClient.binary();
|
109 |
ftpClient.readServerResponse();
|
110 |
return false ;
|
111 |
}
|
112 | /** |
113 |
* 检查文件夹是否存在
|
114 |
* @param dir
|
115 |
* @param ftpClient
|
116 |
* @return
|
117 |
*/
|
118 |
public boolean isDirExist(String dir, FtpClient ftpClient) {
|
119 |
try {
|
120 |
ftpClient.cd(dir);
|
121 |
} catch (Exception e) {
|
122 |
return false ;
|
123 |
}
|
124 |
return true ;
|
125 |
}
|
126 | } |
KmConfig.java代码如下:定义FTP服务器参数,包括登录的用户名密码之类的。
01 |
package ftpDemo;
|
02 |
public class KmConfig {
|
03 |
//主机ip
|
04 |
private String FtpHost = "" ;
|
05 |
//端口号
|
06 |
private int FtpPort;
|
07 |
//ftp用户名
|
08 |
private String FtpUser = "" ;
|
09 |
//ftp密码
|
10 |
private String FtpPassword = "" ;
|
11 |
//ftp中的目录
|
12 |
private String FtpPath = "" ;
|
13 |
public String getFtpHost() {
|
14 |
return FtpHost;
|
15 |
}
|
16 |
public void setFtpHost(String ftpHost) {
|
17 |
FtpHost = ftpHost;
|
18 |
}
|
19 |
public int getFtpPort() {
|
20 |
return FtpPort;
|
21 |
}
|
22 |
public void setFtpPort( int ftpPort) {
|
23 |
FtpPort = ftpPort;
|
24 |
}
|
25 |
public String getFtpUser() {
|
26 |
return FtpUser;
|
27 |
}
|
28 |
public void setFtpUser(String ftpUser) {
|
29 |
FtpUser = ftpUser;
|
30 |
}
|
31 |
public String getFtpPassword() {
|
32 |
return FtpPassword;
|
33 |
}
|
34 |
public void setFtpPassword(String ftpPassword) {
|
35 |
FtpPassword = ftpPassword;
|
36 |
}
|
37 |
public String getFtpPath() {
|
38 |
return FtpPath;
|
39 |
}
|
40 |
public void setFtpPath(String ftpPath) {
|
41 |
FtpPath = ftpPath;
|
42 |
}
|
43 | } |
下面是测试代码:
01 |
package ftpDemo;
|
02 |
import java.io.File;
|
03 |
import java.io.FileInputStream;
|
04 |
import java.io.FileNotFoundException;
|
05 |
import java.io.InputStream;
|
06 |
public class Test {
|
07 |
public static void main(String[] args) {
|
08 |
//设置ftp
|
09 |
KmConfig km = new KmConfig();
|
10 |
km.setFtpHost( "172.20.32.48" );
|
11 |
km.setFtpPort( 21 );
|
12 |
km.setFtpUser( "test" );
|
13 |
km.setFtpPassword( "111111" );
|
14 |
km.setFtpPath( "KM" );
|
15 |
//上传到ftp
|
16 |
ftpUtil util= new ftpUtil();
|
17 |
File file = new File( "F:/文章2.jpg" );
|
18 |
InputStream in;
|
19 |
try {
|
20 |
in = new FileInputStream(file);
|
21 |
util.upLoadFileFtp(km, in, "更改后的名字.jpg" );
|
22 |
} catch (FileNotFoundException e) {
|
23 |
// TODO Auto-generated catch block
|
24 |
e.printStackTrace();
|
25 |
}
|
26 |
}
|
27 | } |