Разбор текстового файла с фиксированным форматом в Java - PullRequest
0 голосов
/ 26 апреля 2010

Предположим, я знаю формат текстового файла,

скажем, каждая строка содержит 4 поля, подобных этому:

firstword secondword thirdword fourthword
firstword2 secondword2 thirdword2 fourthword2
...

и мне нужно полностью прочитать его в память

Я могу использовать этот подход:

open a text file
while not EOF
  read line by line
  split each line by a space
  create a new object with four fields extracted from each line
  add this object to a Set

Хорошо, но есть ли что-нибудь лучше, специальная сторонняя библиотека Java?

Чтобы мы могли заранее определить структуру каждой текстовой строки и проанализировать файл с помощью некоторой функции

thirdpartylib.setInputTextFileFormat("format.xml");
thirdpartylib.parse(Set, "pathToFile")

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Вы можете сделать это так:

// Assuming a Reader called in and a Set called mySet

String line = in.readLine();
while(line != null)
{
  String[] splat = line.split(" ");
  mySet.add(new Widget(splat[0], splat[1], splat[2], splat[3]));
  line = in.readLine();
}

Но вам действительно нужно лучше определить, что вы подразумеваете под «лучше». Приведенный выше подход не будет хорошо работать с «плохим» вводом, но он будет довольно быстрым (это действительно зависит от реализации Set. Если вы постоянно изменяете его размер, вы можете понести снижение производительности).

Использование XML и определение схемы позволит вам проверить ввод перед анализом и, вероятно, упростит создание объекта, но вы не сможете просто иметь четыре строки в каждой строке (вам понадобятся теги XML и т. Д.) , См. XMLBeans для примера сторонней библиотеки.

1 голос
/ 26 апреля 2010

Если вы точно знаете, что будет разделителем, то ваш предложенный подход будет быстрым и надежным и будет содержать очень мало кода. Плюс сторонней библиотеки (google «библиотека текстовых файлов Java» для длинного списка) состоит в том, что она, вероятно, будет иметь кучу кода для обработки странных случаев, которые волнуют авторов. Недостатком является то, что, вероятно, будет больше кода, чем вам нужно, если у вас есть простой и надежный формат текстового файла, который вы обрабатываете.

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

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

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