FTP

Posted 新宇泽起

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTP相关的知识,希望对你有一定的参考价值。

public class FtpUtil {

private static FTPClient ftpClient = new FTPClient();

private static String encoding = System.getProperty("file.encoding");

private static String defaultPath;

/**

* FTP初始化连接

*/

public static boolean connect(String host,Integer port,String userName,String password) throws IOException{

return connect(host,port,userName,password,null);

}

/**

* FTP初始化连接

*/

public static boolean connect(String host,Integer port,String userName,String password,String remotePath) throws IOException{

boolean result=false;

try {

ftpClient.connect(host,port);

// 登录

ftpClient.login(userName, password);

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

// 检验是否连接成功

int reply = ftpClient.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {//连接失败

ftpClient.disconnect();

result =false;

}else{//如果连接成功

result = true;

if(remotePath != null){

defaultPath = remotePath;

result =ftpClient.changeWorkingDirectory(new String(remotePath.getBytes(encoding),"iso-8859-1"));

if(result == false){

System.err.println("ftp changeWorkingDirectory to ".concat(remotePath).concat(" error"));

}

}

System.out.println("ftp connect successfully.");

}

} catch (SocketException e) {

System.err.println("ftp connect failed: " + e.getMessage());

throw e;

} catch (IOException e) {

System.err.println("ftp connect failed: " + e.getMessage());

throw e;

}

return result;

}

/**

* FTP是否连接

*/

public static boolean isConnected(){

return ftpClient.isConnected();

}

/**

* 上传文件

*/

public static boolean uploadFile(String filename, InputStream input) throws IOException {

return uploadFile(null,filename,input);

}

/**

* 上传文件

*/

public static boolean uploadFile(String remotePath, String filename, InputStream input) throws IOException {

boolean result = false;

if (!ftpClient.isConnected()) {

System.err.println("ftp uploadfile error : no ftpserver is connected");

return false;

}

try {

// 转移工作目录至指定目录下

if(remotePath != null){

ftpClient.changeWorkingDirectory(new String(remotePath.getBytes(encoding),"iso-8859-1")); 

}

 

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

result = ftpClient.storeFile(new String(filename.getBytes(encoding),"iso-8859-1"), input);

} catch (IOException e) {

System.err.println("ftp uploadfile error : "+e.getMessage());

throw e;

} finally {

try {

if (input != null) {

input.close();

}

} catch (IOException e) {

System.err.println("ftp uploadfile close error : "+e.getMessage());

throw e;

}

}

System.out.println("ftp uploadfile successfully.");

return result;

}

/**

* 下载FTP文件

*/

public static boolean downFile(String fileName, String localPath) throws IOException {

return downFile(null,fileName,localPath);

}

/**

* 下载FTP文件

*/

public static boolean downFile( String remotePath, String fileName, String localPath) throws IOException {

boolean result = false;

if (!ftpClient.isConnected()) {

System.err.println("ftp download file error : no ftpserver is connected");

return false;

}

try {

 

// 转移工作目录至指定目录下

if(remotePath != null){

ftpClient.changeWorkingDirectory(new String(remotePath.getBytes(encoding),"iso-8859-1"));        

}

 

System.out.println("ftp start download file :" + fileName);

 

// 获取文件列表

FTPFile[] fs = ftpClient.listFiles();

for (FTPFile ff : fs) {

if(fileName != null && !fileName.equals(ff.getName())){

continue;

}

 

File localFile = new File(localPath + "/" + ff.getName());

OutputStream os = new FileOutputStream(localFile);

ftpClient.retrieveFile(ff.getName(), os);

os.close();

 

System.out.println("ftp download file finished :"+ff.getName());

result = true;

}

 

if(result == false){

System.err.println("ftp download error cannot find file : " + fileName);

}

} catch (IOException e) {

System.err.println("ftp download error : "+e.getMessage());

throw e;

return result;

}

/**

* 关闭当前连接

*/

public static void close(){

try {

ftpClient.logout();

ftpClient.disconnect();

} catch (IOException e) {

System.err.println("ftp ftpserver close error : "+e.getMessage());

}

}

/**

* 返回连接默认路径

*/

public static void cdRoot() throws Exception{

try {

if (!ftpClient.isConnected()) {

System.err.println("ftp cd root error : no ftpserver is connected");

}

ftpClient.changeWorkingDirectory(new String("/".getBytes(encoding),"iso-8859-1"));

if(defaultPath != null){

ftpClient.changeWorkingDirectory(new String(defaultPath.getBytes(encoding),"iso-8859-1"));   

}

} catch (Exception e) {

System.err.println("ftp change directory to defaultpath error : "+e.getMessage());

throw e;

}

}

/**

* 工作路径切换

*/

public static void cd(String path) throws Exception{

try {

if (!ftpClient.isConnected()) {

System.err.println(" ftp cd " + path + " : no ftpserver is connected");

}

ftpClient.changeWorkingDirectory(new String(path.getBytes(encoding),"iso-8859-1"));

} catch (Exception e) {

System.err.println("ftp cd ‘" + path + "‘ error : "+e.getMessage());

throw e;

}

}

/**

* 创建工作路径

*/

public static void mkdir(String path) throws IOException{

try {

if (!ftpClient.isConnected()) {

System.err.println("ftp mkdir error : no ftpserver is connected");

}

ftpClient.makeDirectory(path);

} catch (IOException e) {

System.err.println("ftp mkdir ‘" + path + "‘ error : "+e.getMessage());

throw e;

}

}

/**

* 查找文件是否存在

*/

public static FTPFile findFile(String filename) throws IOException{

return findFile(null,filename);

}

/**

* 查找文件是否存在

*/

public static FTPFile findFile(String remotePath, String filename) throws IOException{

try {

if (!ftpClient.isConnected()) {

System.err.println("ftp findfile error : no ftpserver is connected");

return null;

}

FTPFile[] fs = ftpClient.mlistDir(remotePath);

for (FTPFile ff : fs) {

if(filename != null && !filename.equals(ff.getName())){

continue;

}

return ff;

}

} catch (IOException e) {

System.err.println("ftp find file ‘" + filename + "‘ error : "+e.getMessage());

throw e;

}

return null;

}

}

以上是关于FTP的主要内容,如果未能解决你的问题,请参考以下文章

怎么创建一个ftp的服务器?尽量简洁

请教FTP命令??

如何登陆FTP网址

ftp客户端工具,ftp客户端工具实现的方法及连接管理方法

怎么通过PHP来支持FTP和HTTP上传

华为手机怎么打开ftp地址?