Java FTP файл получить проблему - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть приложение, которое запускается по расписанию. Оно подключается к ftp-серверу и получает файлы из удаленной папки. 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 голосов
/ 27 сентября 2011

вы можете использовать флаг boolean isRunning (), setRunning (boolean) и синхронизировать ваш код, чтобы два или более потока не запускали один и тот же метод одновременно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...