Джава:Самый эффективный способ хранения/извлечения информации о тренировках из файла?

StackOverflow https://stackoverflow.com/questions/1773602

  •  21-09-2019
  •  | 
  •  

Вопрос

Я работаю над проектом Java для класса, который хранит информацию о тренировках в плоском файле.Каждый файл будет содержать информацию об одном упражнении (BenchPress.data), содержащую время (в миллисекундах с момента начала), вес и количество повторений.

Пример:

1258355921365:245:12

1258355921365:245:10

1258355921365:245:8

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

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

Однако нет никакой гарантии относительно порядка дат.Пользователь может ввести упражнения на сегодня, а затем войти и ввести упражнения за прошлую неделю по любой причине.Должен ли я нажать кнопку сохранения, чтобы упорядочить всю информацию по дате?

Стоит ли мне идти совершенно в другом направлении?Я знаю, что база данных была бы идеальна, но это групповой проект, и управление установкой базы данных и синхронизацией данных между нами было бы не идеальным.У остальных нет опыта работы с базами данных, и это затруднит выставление оценок.

Так что спасибо за любые советы или предложения.

-Джон

Это было полезно?

Решение

Не усложняйте ситуацию.Если вы не имеете дело с миллионом записей, вы можете просто прочитать все это в памяти и отсортировать по своему усмотрению.И всегда добавляйте записи в конце, так вы с меньшей вероятностью повредите файл.

Другие советы

Для простых проектов использование встроенного типа JavaDB / Апач Дерби может быть хорошей идеей.Конфигурация БД абсолютно минимальна, и в вашем случае вам может понадобиться максимум 2 таблицы (Пользовательская и Тренировочная).Экспорт данных в файл также довольно прост для синхронизации между членами команды.

Однако, как отметил yu_sha, если вы не ожидаете, что у вас будет большой набор данных (для запуска на ПК, > 50000), вы можете просто использовать файл и прочитать все в память.

Прочитайте каждую строку через BufferedReader и проанализировать с помощью StringTokenizer.Глядя на данные, я бы, скорее всего, сохранил массив полей в List которые можно повторять и сортировать в соответствии с вашими предпочтениями.

Если вам необходимо сохранить файл в этом формате, вам, вероятно, лучше всего просто прочитать его целиком в памяти при запуске и сохранить его в TreeMap или какой-либо другой отсортированной карте с возможностью поиска.Затем вы можете использовать удобные методы TreeMap, такие как потолокКлюч или аналогичный FloorKey для поиска совпадений в определенные даты/время.

Использовать плоский червь, библиотека Java, позволяющая анализировать и создавать плоские файлы.Опишите формат с помощью простого файла определения XML, и все готово.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top