Java FTP客户端不下载文件

时间:2016-04-14 11:20:44

标签: java ftp

我试图使用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”的内容,但没有下载文件。 这段代码几天前都在工作。

1 个答案:

答案 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个对象。