Проверка формата файла TXT в Java - PullRequest
4 голосов
/ 28 декабря 2011

Как лучше всего проверить, является ли файл .txt:

  • На самом деле файл .txt, а не файл другого типа с измененным только расширением.

  • Формат файла .txt соответствует указанному формату (поэтому он может быть правильно проанализирован, содержит всю необходимую информацию и т. Д.)

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

1 Ответ

4 голосов
/ 29 декабря 2011

Похоже, вы ищете общий вариант форматирования, могу ли я порекомендовать вам регулярные выражения? Вы можете делать все виды соответствия, используя регулярные выражения. Я написал простой пример ниже [для всех тех экспертов по регулярным выражениям, помилуйте меня, если я не использовал идеальное выражение;)]. Вы можете поместить константы REGEX и MAX_LINES_TO_READ в файл свойств и изменить его, чтобы сделать его еще более обобщенным.

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

Это всего лишь пример, с которым вы можете работать. Вы должны реализовать правильную обработку исключений, отличную от перехвата «Exception» для одного.

Для тестирования ваших регулярных выражений на Java http://www.regexplanet.com/simple/index.html работает очень хорошо.

Вот источник "ValidateTxtFile" ...

import java.io.*;

public class ValidateTxtFile {

    private final int MAX_LINES_TO_READ = 5;

    private final String REGEX = ".{15}[ ]{5}.{15}[ ]{5}[-]\\d{2}\\.\\d{2}[ ]{9}\\d{2}/\\d{2}/\\d{4}";

    public void testFile(String fileName) {

        int lineCounter = 1;

        try {

            BufferedReader br = new BufferedReader(new FileReader(fileName));

            String line = br.readLine();

            while ((line != null) && (lineCounter <= MAX_LINES_TO_READ)) {

                // Validate the line is formatted correctly based on regular expressions                
                if (line.matches(REGEX)) {
                    System.out.println("Line " + lineCounter + " formatted correctly");
                }
                else {
                    System.out.println("Invalid format on line " + lineCounter + " (" + line + ")");
                }

                line = br.readLine();
                lineCounter++;
            }

        } catch (Exception ex) {
            System.out.println("Exception occurred: " + ex.toString());
        }
    }

    public static void main(String args[]) {

        ValidateTxtFile vtf = new ValidateTxtFile();

        vtf.testFile("transactions.txt");
    }   
}

Вот что находится в "Transactions.txt" ...

Electric            Electric Co.        -50.99         12/28/2011
Food                Food Store          -80.31         12/28/2011
Clothes             Clothing Store      -99.36         12/28/2011
Entertainment       Bowling             -30.4393       12/28/2011
Restaurant          Mcdonalds           -10.35         12/28/11

Когда я запустил приложение, вывод был ...

Line 1 formatted correctly
Line 2 formatted correctly
Line 3 formatted correctly
Invalid format on line 4 (Entertainment       Bowling             -30.4393       12/28/2011)
Invalid format on line 5 (Restaurant          Mcdonalds           -10.35         12/28/11)


РЕДАКТИРОВАТЬ 29.12.2011 около 10:00 утра
Не уверен, есть ли проблема с производительностью по этому поводу или нет, но я просто дублировал записи в файле Transactions.txt несколько раз, чтобы создать текстовый файл с 1,3 миллионами строк, и мне удалось пройти через него. Весь файл за 7 секунд на моем компьютере. Я изменил System.out, чтобы просто показать общее количество в конце неверных (524 288) и допустимых (786 432) отформатированных записей. Размер "Transactions.txt" был около 85 МБ.

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