Java FTP文件出问题

时间:2011-09-27 12:26:49

标签: java spring ftp

我有一个作为日程表运行的应用程序。它连接到ftp服务器并从远程folder.scheduler获取文件每5分钟运行一次。有时当远程位置有很多文件时,调度程序再次运行,而第一个循环是在这种情况下有时会下载0个大小的文件,甚至远程位置的实际文件大小都大于0。有谁知道为什么会这样?

下面的

是导入文件的代码。

private void importEDIFiles(String host, String user, String password, String path, String road) {
        try {
            String edi824Path = path + "/" + EDI_824_FOLDER;
            FTPBroker ftpBroker = new FTPBroker(host, user, password, edi824Path);

            FTPClient client = ftpBroker.makeFTPConeection();
            String os = client.getSystemName();
            client.setFileTransferMode(FTP.ASCII_FILE_TYPE);
            File edi824File = null;
            File edi824Filebak = null;
            ArrayList<FTPFile> files;
            try {

                FTPFile[] ftpfiles = client.listFiles();

                logger.info("\t" + ftpfiles.length + " files are in ftp location ");
                if (ftpfiles.length > 0) {
                    files = removeZeroFiles(ftpfiles);
                     for(int x=0;x<files.size();x++){
                         logger.info("name  ---"+files.get(x).getName());
                         logger.info("size ----"+files.get(x).getSize());
                     }
                    String ftpFile = null;
                    logger.info("\t" + files.size() + " downloading from " + road + " rail road.");
                    for (int i = 0; i < files.size(); i++) {
                        ftpFile = files.get(i).getName();
                        logger.info("\t" + ftpFile + " is downloading....");
//                        logger.info("\t" + ftpFile + " size ...." + ftpFile.isEmpty());

                        String source = destinationFilePath + pathSeparator + road + pathSeparator + ftpFile;
                        String target = edi_824backupFilePath + pathSeparator + road + pathSeparator + ftpFile;
                        edi824File = new File(source);
                        edi824Filebak = new File(target);
                        FileOutputStream fosout = new FileOutputStream(source);

                        boolean isRetrieved = client.retrieveFile(ftpFile, fosout);
                        logger.debug("isRetrieved : " + isRetrieved);
                        FileUtils.copyFile(edi824File,edi824Filebak);
                        fosout.flush();
                        fosout.close();


                        boolean isDelete = client.deleteFile(ftpFile);
                        logger.debug("isDelete : " + isDelete);

                    }

                } else {
                    logger.info("No files to Pull in the FTP Location for " + user);
                    //throw new RuntimeException("No files to Pull in  FTP Location.");
                }
            } catch (Exception e) {
                logger.error(e,e);
                e.printStackTrace();
            } finally {
                client.logout();
                client.disconnect();


            }


        } catch (Exception ex) {
            logger.error(ex, ex);
            ex.printStackTrace();
        }


    }

1 个答案:

答案 0 :(得分:0)

您可以使用标志boolean isRunning(),setRunning(boolean),并同步您的代码,以便两个或多个线程不会同时运行相同的方法