Читать текстовый файл в Java - PullRequest
3 голосов
/ 19 апреля 2011

Эй, мне нужно прочитать текстовый файл в Java.Проблема в том, что файл имеет следующий формат:

Id time1 time2 time3 ...
ID2 time1 time2 time3 ...

Мне нужно сначала прочитать все идентификаторы, затем прочитать все время1, затем все время2 и т. Д. Кто-нибудь может дать мне несколько советов, какя могу сделать это, пожалуйста, в Java?Эффективность здесь важна, так как это нужно делать для тысяч времен <- это моя проблема Заранее спасибо за вашу помощь </p>

Ответы [ 5 ]

2 голосов
/ 19 апреля 2011

Самый простой способ - это прочитать весь файл строка за строкой один раз , анализируя строки по ходу работы - тогда вы можете очень легко получить «все идентификаторы» с последующим «все первые разы»и т. д.

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

2 голосов
/ 19 апреля 2011

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

EDIT

Это решение практично, если весь контент файла не может быть загружен в память. Чтобы ограничить количество физических чтений, кэш LRU, в котором хранятся самые последние прочитанные или использованные комбинации идентификаторов, может повысить производительность.

2 голосов
/ 19 апреля 2011

Транспонировать файл. Идентификаторы в строке 1, time1 в строке 2 и т. Д. Конечно, это полезно, если это можно сделать только один раз, и тогда ожидается много чтений этого файла.

1 голос
/ 19 апреля 2011

Мы не можем читать файлы столбец за столбцом.Прочитать весь файл в память (FileReader из java.nio) и проанализировать содержимое (String#split в каждой строке) в структуре данных, например

Map<String, List<String>>

, где ключ карты - это идентификатор (ID,ID2, ..) и значение простой список, который содержит все значения времени.

0 голосов
/ 19 апреля 2011

Если вы работаете на платформе Linux / UNIX, вы можете выполнить некоторую предварительную обработку с помощью команды cut

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