sun.net.ftp.FtpClient 操作FTP服务器上的文件和目录

sun.net.ftp.FtpClient 操作FTP服务器。测试通过

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;

/**
*
* @author laihuanhui
*
*/
public class FtpClientUtil {
FtpClient ftpClient;
private String server;
private int port;
private String userName;
private String userPassword;

public FtpClientUtil(String server, int port, String userName,
String userPassword) {
this.server = server;
this.port = port;
this.userName = userName;
this.userPassword = userPassword;
}

/**
* 链接到服务器
* @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;
}
}

/**
* 进入目录
* @param dir
* @return
*/
public boolean cd(String dir) {
boolean f = false;
try {
ftpClient.cd(dir);
} catch (IOException e) {

e.printStackTrace();
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) {
e.printStackTrace();
} 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);
}
} 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;
}

/**
* 创建FTP目录
* @param ftpDirectory
*/
public boolean createDirectory(String ftpDirectory) {
if (!open())
return false;
ftpClient.sendServer("MKD " + ftpDirectory + "\r\n");
return true;
}

/**
* 重命名FTP目录
* @param ftpDirectory
*/
public boolean renameDirectoryAndFileName(String oldftpDirectory,String newftpDirectory) {
if (!open())
return false;
ftpClient.sendServer("RNFR " + oldftpDirectory + "\r\n");
ftpClient.sendServer("RNTO " + newftpDirectory + "\r\n");
return true;
}

/**
* 往文件中写内容
* @param ftpDirectory
*/
public boolean writeContent(String Directoryfile) {
if (!open())
return false;
try {
PrintWriter pw = new PrintWriter(ftpClient.put(Directoryfile)); // 写入的文件名.文件名可以不存在
pw.write(" this is a test \r\n");
pw.write(" this is a test \r\n");
pw.write(" this is a test \r\n");
pw.flush();
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}

/**
* 关闭链接
*/
public void close() {
try {
if (ftpClient != null && ftpClient.serverIsOpen())
ftpClient.closeServer();
} catch (Exception e) {

}
}

/**
* 读文件数据流
* @param ftpDirectoryAndFileName
* @return
* @throws Exception
*/
public TelnetInputStream readRemoteStream(String ftpDirectoryAndFileName) throws Exception {
if (open()){
TelnetInputStream is = null;
try {
is = ftpClient.get(ftpDirectoryAndFileName);
} catch (Exception e) {
e.printStackTrace();
}
return is;
}else{
return null;
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值