我试图从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 回答
斜杠应该像这样向后:“C:\ \ test \ \ FTP_TEST \ \ GET”(没有中间空格,我这样说是因为此页面中的html解析器将其更改为只有一个斜杠)intead:
甚至更好:
您好我已经解决了更改代码的问题 . 尝试catch块如下
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已成功下载 . ”);
}
}