簡體   English   中英

從FTP服務器檢索Java文件

[英]Java File retrieving from FTP server

我正在嘗試從ftp服務器檢索文件,但出現以下錯誤。 你能幫我嗎

導入java.io.BufferedOutputStream;

導入java.io.File;

導入java.io.FileOutputStream;

導入java.io.IOException;

導入java.io.InputStream;

導入java.io.ObjectInputStream.GetField;

導入java.io.OutputStream;

導入java.text.DateFormat;

導入java.text.SimpleDateFormat;

導入org.apache.commons.net.ftp.FTP;

導入org.apache.commons.net.ftp.FTPClient;

導入org.apache.commons.net.ftp.FTPFile;

導入org.apache.commons.net.ftp.FTPReply;

公共類FtpTest_V1 {

公共靜態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(); try { ftpClient.connect(server, port); 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("Connect failed"); return; } boolean success = ftpClient.login(user, pass); //System.out.println(success); showServerReply(ftpClient); if (!success) { System.out.println("Could not login to the server"); return; } // Lists files and directories FTPFile[] files1 = ftpClient.listFiles("TEST2"); //printFileDetails(files1); // uses simpler methods String[] files2 = ftpClient.listNames("TEST2"); printNames(files2); String[] files = files2; for (String aFile: files) { String filename = aFile; fos = new FileOutputStream(filename); // Download file from FTP server ftpClient.retrieveFile("C://test//FTP_TEST//GET" + filename, >fos); } } catch (IOException ex) { System.out.println("An Error Occured"+ex.getMessage()); System.out.println("Warning! Something wrong happened"); ex.printStackTrace(); } finally { // logs out and disconnects from server try { 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) { i++; } System.out.println("Number of files = "+i); for (String aFile: files) { System.out.println(aFile); } } } private static void showServerReply(FTPClient ftpClient) { String[] replies = ftpClient.getReplyStrings(); if (replies != null && replies.length > 0) { for (String aReply : replies) { System.out.println("SERVER : " + aReply); } } 

}

}

這是我的輸出:

服務器:220-FileZilla Server 0.9.43 beta版

服務器:220 Hello FTP服務器

220

服務器: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.FileOutputStream。(未知來源)

在FtpTest_V1.main(FtpTest_V1.java:74)

反斜杠應像這樣向后:“ C:\\ \\ test \\ \\ FTP_TEST \\ \\ GET”(不帶中間空格,我這樣說是因為此頁面中的html解析器將其更改為僅一個斜杠),它是:

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

甚至更好:

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

您好,我已經解決了更改代碼的問題。 嘗試捕獲塊如下

ftpClient.connect(服務器,端口);

ftpClient.login(user,pass);

ftpClient.enterLocalPassiveMode();

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

String []文件= ftpClient.listNames(“ TEST_FILE”);

  for (String aFile: files) { String remoteFile1 = aFile; File downloadFile1 = new File("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("File #1 has been downloaded successfully."); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM