首页 文章

从FTP服务器检索Java文件

提问于
浏览
0

我试图从ftp服务器检索文件,但我得到如下错误 . 你能帮我吗?

import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream.GetField; import java.io.OutputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; public class FtpTest_V1 {public static void main(String [] args){String server =“192.168.200.8”;

int port = 21;

String user =“Test_user”;

String pass =“123456 **”;

FileOutputStream fos = null;

FTPClient ftpClient = new FTPClient();

尝试{

ftpClient.connect(服务器端口);

showServerReply(ftpClient);

ftpClient.enterLocalPassiveMode();

int replyCode = ftpClient.getReplyCode();

的System.out.println(replyCode);

// isPositiveCompletion

if(!FTPReply.isPositiveCompletion(replyCode)){

的System.out.println(FTPReply.isPositiveCompletion(replyCode));

的System.out.println(FTPReply.isNegativeTransient(replyCode));

System.out.println(“连接失败”);

返回;

}

boolean success = ftpClient.login(user,pass);

//System.out.println(success);

showServerReply(ftpClient);

if(!success){

System.out.println(“无法登录服务器”);

返回;

}

//列出文件和目录

FTPFile [] files1 = ftpClient.listFiles(“TEST2”);

// printFileDetails(文件下载1);

//使用更简单的方法

String [] files2 = ftpClient.listNames(“TEST2”);

printNames(files2);

String [] files = files2;

for(String aFile:files){

String filename = aFile;

fos = new FileOutputStream(filename);

//从FTP服务器下载文件

ftpClient.retrieveFile(“C:// test // FTP_TEST // GET”filename,> fos);

}

}

catch(IOException ex){

System.out.println(“An Error Occured”ex.getMessage());

System.out.println(“警告!发生了错误的事情”);

ex.printStackTrace();

} finally {

//注销并断开与服务器的连接

尝试{

if(fos!= null){

fos.close();

}

if(ftpClient.isConnected()){

ftpClient.logout();

ftpClient.disconnect();

}

} catch(IOException ex){

ex.printStackTrace();

}

}

}

private static void printNames(String files []){

if(files!= null && files.length> 0){

int i = 0;

for(String aFile:files){

一世 ;

}

System.out.println(“Number of files =”i);

for(String aFile:files){

的System.out.println(å文件);

}

}
}

private static void showServerReply(FTPClient ftpClient){

String []回复= ftpClient.getReplyStrings();

if(回复!= null && replies.length> 0){

for(String aReply:replylies){

System.out.println(“SERVER:”aReply);

}

}
}}

这是我的输出:

SERVER:220-FileZilla Server版本0.9.43 beta SERVER:220 Hello FTP SERVER 220 SERVER:230登录文件数= 2 TEST2 / testfile.csv TEST2 / tttt.csv错误OccuredTEST2 \ testfile.csv(系统不能找到指定的路径)警告!发生了错误java.io.FileNotFoundException:TEST2 \ testfile.csv(系统找不到指定的路径)java.io.FileOutputStream.open(本地方法)java.io.FileOutputStream . (未知来源)java.io FtpTest_V1.main的FileOutputStream . (未知来源)(FtpTest_V1.java:74)

2 回答

  • 1

    斜杠应该像这样向后:“C:\ \ test \ \ FTP_TEST \ \ GET”(没有中间空格,我这样说是因为此页面中的html解析器将其更改为只有一个斜杠)intead:

    ftpClient.retrieveFile("C://test//FTP_TEST//GET" + filename, >fos);
    

    甚至更好:

    "C:" + File.separatorChar + "test" + File.separatorChar + "FTP_TEST" + File.separatorChar + "GET"
    
  • 0

    您好我已经解决了更改代码的问题 . 尝试catch块如下

    ftpClient.connect(服务器,端口); ftpClient.login(user,pass); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); String [] files = ftpClient.listNames(“TEST_FILE”); for(String aFile:files){

    String remoteFile1 = aFile;

    文件downloadFile1 =新文件(“C:/ test / FTP_TEST
    / GET /“remoteFile1.replace(”TEST_FILE“,”“)); OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));

    boolean success = ftpClient.retrieveFile(remoteFile1,outputStream1);

    outputStream1.close();

    if(success){

    System.out.println(“文件#1已成功下载 . ”);

    }

    }

相关问题