Как загрузить только новые файлы с сервера? - PullRequest
3 голосов
/ 12 апреля 2009

У меня есть несколько CSV-файлов, которые я хочу загружать из финансов Yahoo каждый день. Я хочу, чтобы мое приложение считывало дату создания файла (на моем компьютере, а не на сервере). Если дата создания предшествует сегодняшнему дню, то новый файл должен быть загружен (так как в нем будут новые данные). Если нет, то новый файл не должен быть загружен, а калькулятор корреляции (который, по сути, и есть моя заявка) должен использовать последний загруженный файл для конкретного биржевого кода.

Я немного погуглил и нашел проект Apache POI.

Это лучший способ, есть ли лучший способ, что бы вы порекомендовали. JNI вообще имеет отношение здесь?

Ответы [ 4 ]

5 голосов
/ 12 апреля 2009

Возможно, я что-то упустил, но не понимаю, зачем вам нужен JNI или POI для загрузки файла. Если вы загружаете файл по HTTP, вы можете использовать HttpURLConnection с заголовком запроса «If-Modified-Since».

4 голосов
/ 12 апреля 2009

Рассматривали ли вы создание учетной записи FTP для доступа к этой конкретной папке и затем использование клиента FTP, такого как SmartFTP или FileZilla, для синхронизации локальной папки с удаленной? Должно быть очень простым в настройке и удобным в использовании ... Кроме того, вы можете просто создать командный сценарий FTP и выполнить его из своего Java-кода, если это абсолютно необходимо ...

Или я попытаюсь указать вам другое направление: md5 () или другие алгоритмы дайджеста сообщений могут вам помочь. Вы не должны полагаться на метки времени. Попробуйте вычислить md5 () хеш файла, который у вас есть, и файла, который вы собираетесь загрузить. Тогда вы знаете, загружать или нет.

2 голосов
/ 12 апреля 2009

У меня есть несколько файлов CSV, которые я хочу скачать с Yahoo финансов ежедневно. Я хочу, чтобы мое заявление читать дату создания файла (на моем компьютер, а не сервер). Если дата создания предшествует сегодня, то новый файл должен быть загружен (как у него будут новые данные).

Чтобы обнаружить изменения в локальном файле, вам нужна дата последнего изменения файла, которая является более общей, чем дата создания для этого вида проверки (поскольку она также показывает изменения в файле после того, как он был создан).

Вы можете получить это в Java, используя

public long lastModified()

метод для объекта File.

Обратите внимание, что в File API нет способа получить дату создания, возможно потому, что эта информация доступна не во всех файловых системах.

Если вам абсолютно нужна дата создания файла, то (если вы создаете файлы самостоятельно или вы можете спросить тех, кто это делает), вы можете закодировать дату создания по соглашению в имени файла, например это: myfile_2009_04_11.csv.

Затем вам нужно будет проанализировать имя файла и определить дату создания.

Я немного погуглил и нашел проект Apache POI. Это лучший путь, есть ли лучше Кстати, что бы вы порекомендовали.

Проект Apache POI - это библиотека для чтения и записи файлов MS Office (в данном случае это файлы Excel). CSV - это простой текстовый формат, поэтому вам не нужно использовать POI для его чтения.

Кроме того, необходимая информация (дата создания или дата последнего изменения) доступна в виде метаданных для самого файла, а не для данных файла, поэтому вам не требуется POI для доступа к нему.

JNI здесь вообще имеет отношение?

Теоретически, вы можете использовать собственное расширение JNI (мост к собственному коду), чтобы получить дату создания файла в тех файловых системах, которые его поддерживают.

Однако лучше всего использовать переносную дату последней модификации, уже указанную в API Java SDK, и / или соглашение «дата создания, закодированная в имени файла».

Использование JNI сделает вашу программу не переносимой без каких-либо дополнительных преимуществ.

1 голос
/ 12 апреля 2009

JNI определенно не имеет значения, как и Apache POI, если только дата создания не сохранена в самом файле (маловероятно). В противном случае это внешние метаданные, которые либо доступны через заголовки HTTP (возможно, с использованием чистой Java), либо не доступны вообще.

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