Рубрики
Без рубрики

Как написать в файл CSV на Java

Быстрое и практическое руководство по написанию CSV на Java.

Автор оригинала: baeldung.

1. Обзор

В этом кратком учебнике, мы собираемся, чтобы узнать как написать в файл CSV с помощью Java . CSV означает Comma-Separated-Values, и это общий формат для выполнения массовой передачи данных между системами.

Чтобы написать наш файл CSV, мы будем использовать классы в java.io пакет.

Поговорим об особых персонажах и как с ними обращаться. Мы будем нацеливаться на наш выпускной файл открыть в Microsoft Excel и Google листы.

После нашего примера Java, мы кратко посмотрим на некоторые доступные сторонние библиотеки для работы с файлами CSV.

2. Письмо с PrintWriter

Мы собираемся использовать РаспечататьПисач для написания нашего файла CSV. Для более подробного взгляда на использование java.io написать в файл, увидеть наши статья о написании файлов .

2.1. Написание CSV

Во-первых, давайте создадим метод форматирования одной строки данных, представленной как массив Струнные секунда:

public String convertToCSV(String[] data) {
    return Stream.of(data)
      .map(this::escapeSpecialCharacters)
      .collect(Collectors.joining(","));
}

Прежде чем мы назовем этот метод, однако, давайте следующий создать некоторые примеры данных:

List dataLines = new ArrayList<>();
dataLines.add(new String[] 
  { "John", "Doe", "38", "Comment Data\nAnother line of comment data" });
dataLines.add(new String[] 
  { "Jane", "Doe, Jr.", "19", "She said \"I'm being quoted\"" });

И с этими данными в руке, давайте конвертировать каждую строку с конвертироватьToCSV и напишите его в файл:

public void givenDataArray_whenConvertToCSV_thenOutputCreated() throws IOException {
    File csvOutputFile = new File(CSV_FILE_NAME);
    try (PrintWriter pw = new PrintWriter(csvOutputFile)) {
        dataLines.stream()
          .map(this::convertToCSV)
          .forEach(pw::println);
    }
    assertTrue(csvOutputFile.exists());
}

2.2. Обработка специальных символов

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

Например, мы сосредоточимся на запятых, кавычках и новых линиях. Поля, содержащие запятые или котировки, будут окружены двойными котировками, а двойные котировки будут удалены с двойными котировками. Мы устраним новые линии и заменим их каждый белым пространством.

Какие символы являются проблемой и как они должны быть обработаны может варьироваться в зависимости от случая использования.

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

Давайте реализуем нашу побегСпециальныеЧакторы метод сейчас:

public String escapeSpecialCharacters(String data) {
    String escapedData = data.replaceAll("\\R", " ");
    if (data.contains(",") || data.contains("\"") || data.contains("'")) {
        data = data.replace("\"", "\"\"");
        escapedData = "\"" + data + "\"";
    }
    return escapedData;
}

3. Библиотеки третьих сторон

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

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

Давайте посмотрим на некоторые из них:

  • Apache Commons CSV : CSV предложение Apache для работы с CSV файлов
  • Открытый CSV : Еще одна популярная и активно поддерживаемая библиотека CSV
  • Флэтпак : Активно развивается библиотека CSV с открытым исходным кодом
  • CSVeed : С открытым исходным кодом и активно поддерживается

4. Заключение

В этой быстрой статье мы показали, как написать файл CSV с помощью файлов Java РаспечататьПисач класс. Далее мы обсудили и обработаем специальные символы в выходных данных.

После нашего простого примера Java мы рассмотрели обзор доступных сторонних библиотек.

Пример кода доступен более чем на GitHub.