2016-12-22 3 views
0

Я хочу сохранить свои данные в CSV-файл. Я использую Scanner для чтения -> CSVWriter для сохранения.CSVWriter не разрешает писать в файл

У меня ошибка: несовместимые типы: Список [String] не может быть преобразован в String [].

метод:

private static void insertToFile(String source, String target) 
{ 
    List<String> data = new ArrayList<String>(); 
    try{ 
    Scanner sc = new Scanner(new File(source)); 

    while (sc.hasNextLine()) { 
     data.add(sc.nextLine()); 
    } 
    sc.close(); 
    } 
    catch(Exception e){ 
    e.printStackTrace(); 
    } 

     File resfile = new File(target);  

     try{ 
      CSVWriter writer = new CSVWriter(new FileWriter(resfile, true)); 

      //BufferedWriter bufferedWriter = new BufferedWriter(writer); 

      for (String j : data) { 
       //writer.writeAll(data);//error here 
      } 

       writer.close(); 
      } 
     catch(Exception e){ 
       e.printStackTrace(); 
     } 
    } 
+0

Ну, если 'writeAll()' требует передачи массива, вы не можете напрямую передать список. Сначала попробуйте преобразовать его, например. 'writer.writeAll (data.toArray (new String [])'. – Thomas

+0

Вам не нужен цикл for в этом случае просто напишите 'writer.writeAll (data.toArray (new String []))' – Babel

ответ

1

Проблема заключается в том, что

writer.writeAll принять String[] в качестве входных данных, вы передаете изменяющийся List<String>


for (String j : data) { 
    //writer.writeAll(data);//error here 
} 

к

writer.writeAll(data.toArray(new String[data.size()])); решит проблему.

+0

спасибо @Jobin! – 4est

0

Попробуйте вместо этого:

private static void insertToFile(String source, String target) 
{ 
    List<String> data = new ArrayList<>(); 

    // utilize Scanner implementing AutoCloseable and try-with-resource construct 
    // see https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) 
    try (Scanner sc = new Scanner(new File(source))) { 
     while (sc.hasNextLine()) { 
      data.add(sc.nextLine()); 
     } 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 

    File resfile = new File(target); 

    try { 
     // depending on the CSVWriter implementation consider using try-with-resource as above 
     CSVWriter writer = new CSVWriter(new FileWriter(resfile, true)); 

     writer.writeAll(data.toArray(new String[data.size()])); 

     writer.close(); 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 

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

0

Существует простой способ сделать это, вы можете использовать приведенный ниже код. Импортируйте эти зависимости в свой код (импортируйте java.io.File, импортируйте java.io.FileWriter).

FileWriter writer = new FileWriter(new File(File_path)); 
writer.write(data); 
writer.close(); 
+0

на writer.write (data) Я получил ошибку – 4est

+0

, какую ошибку вы получили? –

+0

Я удалил все, начиная с File resfile = new File (target) ..... и поместил ваш код. Теперь я получил ошибку: не найдено подходящего метода записи (List [String]) – 4est

Смежные вопросы