我试图使用FTPClient从服务器下载zip文件,我的代码是
FTPClient ftpClient = new FTPConnection().makeConnection(loc);
try {
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
success = ftpClient.changeWorkingDirectory(PATH + preset + "/" + file_to_download + offset);
System.out.println("Download Path:-" + PATH + preset + "/" + file_to_download + offset);
if (!success) {
System.out.println("Could not changed the directory to RIBS");
return;
} else {
System.out.println("Directory changed to RIBS");
}
FTPFile[] files = ftpClient.listFiles();
for (FTPFile file : files) {
if (file.getName().contains(".zip")) {
dfile = file;
}
}
fsize=dfile.getSize();
fileMap.put("build", dfile.getName());
primaryStage = (Stage) ap.getScene().getWindow();
String homePath = System.getProperty("user.home");
File downloadPath = new File(homePath + "\\Buildss\\" + osVer);
if (!downloadPath.exists()) {
if (downloadPath.mkdirs()) {
System.out.println("Directory is created!");
} else {
System.out.println("Failed to create directory!");
}
}
// System.out.println(chosenDir.getAbsolutePath());
filePath = new File(downloadPath + "/" + dfile.getName());
if (filePath.exists()) {
System.out.println("File altready exist");
return;
}
else {
fileMap.put("path", filePath.toString());
fileMap.put("kind", "RIBS");
Task downloadTask = new Task<Void>() {
@Override
public Void call() throws IOException {
try {
long len = dfile.getSize();
System.out.println("File From Server:::::: " + len);
downloadFile = new File(downloadPath + "/" + dfile);
outputFile = new FileOutputStream(downloadFile);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ftpClient.sendNoOp();
ftpClient.setConnectTimeout(1000);
//ftpClient.retrieveFile(dfile, output);
if (ftpClient.retrieveFile(dfile.getName(), outputFile) == true) {
downloadButton.setDisable(true);
System.out.println("LOCAL FILE LENGTH:-" + downloadFile.length());
}
return null;
}
};
Thread t = new Thread(downloadTask);
t.start();
但现在如果我去下载位置,我会看到类似“-rwxrwx --- 1 ftp ftp 513235293 Apr 11 06”的内容,但没有下载文件。 这段代码几天前都在工作。
答案 0 :(得分:0)
我认为问题与以下
有关// File dfile
FTPFile[] files = ftpClient.listFiles();
for (FTPFile file : files) {
if (file.getName().contains(".zip")) {
dfile = file;
}
}
...
File downloadPath = new File(homePath + "\\Buildss\\" + osVer);
...
// File downloadFile;
downloadFile = new File(downloadPath + "/" + dfile);
我假设dfile
引用了代表Unix文件的File
对象。因此downloadPath + "/" + dfile
的连接不会返回您的期望。
您应该使用downloadPath.getName() + "/" + dfile.getName()
。但是您需要从dfile.getName()
中删除可能的路径名。首选的方法是使用java.nio.file.Path个对象。