java ftp 遍历_java通过ftp上传、下载文件,遍历文件目录

这个Java类实现了一个FTP客户端,可以连接到FTP服务器,进行文件上传、下载、遍历目录和删除操作。示例代码展示了如何使用该类进行FTP交互,包括创建目录、删除文件等。
摘要由CSDN通过智能技术生成

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) {

//Logs.error(e.toString());

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 getFileNameList(String ftpDirectory) {

List list = new ArrayList();

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");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值