Скопируйте динамически увеличивающиеся данные файла журнала с FTP на локальный

1

Мне нужно скопировать и вставить динамически увеличивать log file data from FTP Server to local drive.

В приведенной ниже программе я могу сделать только одно копирование. И не incremental manner.

public class ReadFtpFile {

    public static void main(String[] args) throws UnknownHostException {

    String server = "myIP";
    int port = 20;
    String user = "username";
    String pass = "password";

    FTPClient ftpClient = new FTPClient();
    try {

        ftpClient.connect(server, port);
        ftpClient.login(user, pass);
        ftpClient.enterLocalPassiveMode();
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

        // APPROACH #2: using InputStream retrieveFileStream(String)
        String remoteFile2 = "/folder/myfile.log";
        File downloadFile2 = new File("F:/myfolder/mylogfile.log");
        OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));
        InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);
        byte[] bytesArray = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(bytesArray)) != -1) {
        outputStream2.write(bytesArray, 0, bytesRead);
        }

        Boolean success = ftpClient.completePendingCommand();
        if (success) {
        System.out.println("File #2 has been downloaded successfully.");
        }
        outputStream2.close();
        inputStream.close();

    } catch (IOException ex) {
        System.out.println("Error: " + ex.getMessage());
        ex.printStackTrace();
    } finally {
        try {
        if (ftpClient.isConnected()) {
            ftpClient.logout();
            ftpClient.disconnect();
        }
        } catch (IOException ex) {
        ex.printStackTrace();
        }
    }
    }

}

Данные файла журнала на FTP сервере растут в течение каждой second Мне нужно обновить локальный файл новыми данными на FTP сервере.

  • 0
    Не можете ли вы настроить свой FTP-сервер для прокрутки файлов журнала?
Теги:
ftp
client-server
ftp-client

2 ответа

3
Лучший ответ

Заменить линии

OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));
InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);

с

ftpClient.setRestartOffset(downloadFile2.length());
InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);
OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2, true));

Это проверяет, существует ли файл и, если да, загружает только новые данные. Если вам нужно делать это периодически, добавьте цикл вокруг всего блока try-catch.

0

Вам необходимо обновить свой код потоками Java и объединить в циклы, чтобы запланировать эту программу в течение желаемого времени.

    String remoteFile2 = "/folder/myfile.log";

    File downloadFile2 = new File("F:/myfolder/mylogfile.log");

    OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2));

    InputStream inputStream = ftpClient.retrieveFileStream(remoteFile2);

    byte[] bytesArray = new byte[4096];
    int bytesRead = -1;
    int minutecount=0;

    while(minutecount==120){
    while ((bytesRead = inputStream.read(bytesArray)) != -1) {
        outputStream2.write(bytesArray, 0, bytesRead);
        }
    // Here i sceduled for every 1 minute
       Thread.sleep(60*1000);
       minutecount++;
    }
    Boolean success = ftpClient.completePendingCommand();
    if (success) {
    System.out.println("File #2 has been downloaded successfully.");
    }
    outputStream2.close();
    inputStream.close();'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню