Прочтите файл CSV и напишите файл Json на Java

Я изменил свой код:

private static final String SAMPLE_CSV_FILE_PATH = "src/main/resources/testCSV.csv";
private static final String OUT_PUT_CSV_PATH = "src/main/resources/outCSV.csv";

public static void main(String[] args) throws IOException {

    Reader reader = Files.newBufferedReader(Paths.get(SAMPLE_CSV_FILE_PATH));
    CSVReader csvReader = new CSVReader(reader);



    List<String[]> records = csvReader.readAll();
    Writer writer = Files.newBufferedWriter(Paths.get(OUT_PUT_CSV_PATH));
    CSVWriter out = new CSVWriter(writer);

    int i = 1;
    int total = 0;
    while(i < records.size()){
        String[] result = records.get(i);
        for(int j =1; j<= Integer.parseInt(result[1]); j++){
            String pattern = "00000";
            DecimalFormat myFormatter = new DecimalFormat(pattern);
            String output = myFormatter.format(j);
            writer.append(result[0]+output+"\n");
            total++;
        }
        i++;
    }
    out.flush();
    out.close();
    System.out.println(total);
}

Прочтите файл CSV и напишите файл Json на Java

Теперь я использую первый файл CSV для генерации серийного номера, что-то вроде:

NAIS00001
NAIS00002
...
NAIS00625

Затем я записываю эти серийные номера в новый файл CSV. Но есть только один столбец. 6 миллионов данных в одном столбце ... Как я могу пометить новый столбец?

«Но он слишком велик для записи в файл json». - что это обозначает? Вы получаете сообщение об ошибке? Пожалуйста, предоставьте более подробную информацию.

OldProgrammer 01.05.2018 23:10

Возможно, вы могли бы написать здесь образец csv, а не связывать внешнюю службу.

Ondra Žižka 01.05.2018 23:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
747
1

Ответы 1

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

Попробуй это:

FileWriter fileWriter = new FileWriter("src/main/resources/testOutPut.json", true);

Документация

Спасибо, работает. Но я запустил его в течение 5 секунд, и мой файл json стал 100 МБ. Неужели он такой большой? И у меня 6 миллионов номеров. Мне нужно перейти на другой метод?

LOTR94 01.05.2018 23:42

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

NAMS 01.05.2018 23:47

Да, но проблема в том, что файл CSV показывает только модель и общее количество, мне нужно объединить модель и количество, чтобы сгенерировать серийный номер. Могу ли я создать новый файл CSV для хранения серийного номера? Будет ли меньше хранить 6 миллионов чисел в CSV, чем хранить в json?

LOTR94 01.05.2018 23:56

По крайней мере, вы бы убрали все дополнительное форматирование, связанное с JSON, так что да, я ожидаю, что таким образом вы сэкономите немного места. Но если все ваши серийные номера состоят из 9 символов, как в вашем примере, и у вас есть ~ 6 миллионов серийных номеров, и при условии, что вы используете UTF-8, это как минимум ~ 54 миллиона байтов данных, что составляет примерно половину те 100 МБ, которые у вас были раньше.

NAMS 02.05.2018 00:01

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