import
java.io.DataInputStream;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.util.ArrayList;
import
java.util.List;
import
org.apache.catalina.tribes.util.Logs;
import
sun.net.TelnetInputStream;
import
sun.net.TelnetOutputStream;
import
sun.net.ftp.FtpClient;
public
class
DownFileForFtp {
FtpClient
ftpClient;
private
String server =
"ip"
;
private
int
port =
21
;
private
String userName =
"usn"
;
private
String userPassword =
"pwd"
;
/**
*
鏈接到服務器
*
*
@return
*/
public
boolean
open() {
if
(ftpClient !=
null
&& ftpClient.serverIsOpen())
return
true
;
try
{
ftpClient
=
new
FtpClient();
ftpClient.openServer(server,
port);
ftpClient.login(userName,
userPassword);
ftpClient.binary();
return
true
;
}
catch
(Exception e) {
e.printStackTrace();
ftpClient
=
null
;
return
false
;
}
}
public
boolean
cd(String dir) {
boolean
f =
false
;
try
{
ftpClient.cd(dir);
}
catch
(IOException e) {
return
f;
}
return
true
;
}
/**
*
上傳文件到FTP服務器
*
*
@param localPathAndFileName
*
本地文件目錄和文件名
*
@param ftpFileName
*
上傳後的文件名
*
@param ftpDirectory
*
FTP目錄如:/path1/pathb2/,如果目錄不存在回自動創建目錄
*
@throws Exception
*/
public
boolean
upload(String localDirectoryAndFileName, String ftpFileName,
String
ftpDirectory)
throws
Exception {
if
(!open())
return
false
;
FileInputStream
is =
null
;
TelnetOutputStream
os =
null
;
try
{
char
ch =
'
'
;
if
(ftpDirectory.length() >
0
)
ch
= ftpDirectory.charAt(ftpDirectory.length() -
1
);
for
(; ch ==
'/'
|| ch ==
'\\'
;
ch = ftpDirectory
.charAt(ftpDirectory.length()
-
1
))
ftpDirectory
= ftpDirectory.substring(
0
,
ftpDirectory.length()
-
1
);
int
slashIndex = ftpDirectory.indexOf(
47
);
int
backslashIndex = ftpDirectory.indexOf(
92
);
int
index = slashIndex;
String
dirall = ftpDirectory;
if
(backslashIndex != -
1
&& (index == -
1
|| index > backslashIndex))
index
= backslashIndex;
String
directory =
""
;
while
(index != -
1
)
{
if
(index >
0
)
{
String
dir = dirall.substring(
0
,
index);
directory
= directory +
"/"
+ dir;
ftpClient.sendServer(
"XMKD
"
+ directory +
"\r\n"
);
ftpClient.readServerResponse();
}
dirall
= dirall.substring(index +
1
);
slashIndex
= dirall.indexOf(
47
);
backslashIndex
= dirall.indexOf(
92
);
index
= slashIndex;
if
(backslashIndex != -
1
&&
(index == -
1
|| index > backslashIndex))
index
= backslashIndex;
}
ftpClient.sendServer(
"XMKD
"
+ ftpDirectory +
"\r\n"
);
ftpClient.readServerResponse();
os
= ftpClient.put(ftpDirectory +
"/"
+ ftpFileName);
File
file_in =
new
File(localDirectoryAndFileName);
is
=
new
FileInputStream(file_in);
byte
bytes[] =
new
byte
[
1024
];
int
i;
while
((i = is.read(bytes)) != -
1
)
os.write(bytes,
0
,
i);
return
true
;
}
catch
(Exception e) {
e.printStackTrace();
return
false
;
}
finally
{
if
(is !=
null
)
is.close();
if
(os !=
null
)
os.close();
}
}
/**
*
從FTP服務器上下載文件並返回下載文件長度
*
*
@param ftpDirectoryAndFileName
*
@param localDirectoryAndFileName
*
@return
*
@throws Exception
*/
public
long
download(String ftpDirectoryAndFileName,
String
localDirectoryAndFileName)
throws
Exception {
long
result =
0
;
if
(!open())
return
result;
TelnetInputStream
is =
null
;
FileOutputStream
os =
null
;
try
{
is
= ftpClient.get(ftpDirectoryAndFileName);
java.io.File
outfile =
new
java.io.File(localDirectoryAndFileName);
os
=
new
FileOutputStream(outfile);
byte
[]
bytes =
new
byte
[
1024
];
int
c;
while
((c = is.read(bytes)) != -
1
)
{
os.write(bytes,
0
,
c);
result
= result + c;
}
}
catch
(Exception e) {
throw
e;
}
finally
{
if
(is !=
null
)
is.close();
if
(os !=
null
)
os.close();
}
return
result;
}
/**
*
返回FTP目錄下的文件列表
*
*
@param ftpDirectory
*
@return
*/
public
List<String> getFileNameList(String ftpDirectory) {
List<String>
list =
new
ArrayList<String>();
if
(!open())
return
list;
try
{
DataInputStream
dis =
new
DataInputStream(
ftpClient.nameList(ftpDirectory));
String
filename =
""
;
while
((filename = dis.readLine()) !=
null
)
{
list.add(filename);
System.out.println(filename);
}
}
catch
(Exception e) {
e.printStackTrace();
}
return
list;
}
/**
*
刪除FTP上的文件
*
*
@param ftpDirAndFileName
*/
public
boolean
deleteFile(String ftpDirAndFileName) {
if
(!open())
return
false
;
ftpClient.sendServer(
"DELE
"
+ ftpDirAndFileName +
"\r\n"
);
return
true
;
}
/**
*
刪除FTP目錄
*
*
@param ftpDirectory
*/
public
boolean
deleteDirectory(String ftpDirectory) {
if
(!open())
return
false
;
ftpClient.sendServer(
"XRMD
"
+ ftpDirectory +
"\r\n"
);
return
true
;
}
/**
*
關閉鏈接
*/
public
void
close() {
try
{
if
(ftpClient !=
null
&& ftpClient.serverIsOpen())
ftpClient.closeServer();
}
catch
(Exception e) {
}
}
public
static
void
main(String []args)
throws
Exception{
DownFileForFtp
df =
new
DownFileForFtp();
df.getFileNameList(
"E:\\uploadfiles\\cat"
);
df.download(
"E:\\uploadfiles\\cat\\2012-03-29.11.00.00.012.xml"
,
"F:\\temp\\ftpdown\\2012-03-29.11.00.00.012.xml"
);
}
}