Запись массива строковых массивов в файл (txt, csv и т. д.)

У меня есть массив строковых массивов с именем NewArray.

ArrayList<String[]> NewArray = new ArrayList<String[]>();

Данные в NewArray выглядят примерно так

[Vial1,Dest1]
[Vial2,Dest1]
[Vial3,Dest2]
[Vial4,Dest2]

Я хочу сохранить эти данные в этом формате (без скобок) в CSV/текстовый файл (с заголовками). Идеальным выходным форматом будет:

VialNo,DestinationNo (these are the headers)
Vial1,Dest1
Vial2,Dest1
Vial3,Dest2
Vial4,Dest2

Как мне использовать что-то вроде FileWriter для получения желаемого результата в файле txt/CSV?

Я пробовал что-то вроде

FileWriter writer = new FileWriter("output.txt"); 
for(String[] str: NewArray) {
  writer.write(str);
}
writer.close();

Но я получаю сообщение об ошибке "Метод write(int) в типе OutputStreamWriter неприменим для аргументов (String[])"


person user3633260    schedule 20.06.2014    source источник
comment
Что вы пробовали? С чем у вас проблемы? Вы спрашиваете, как написать цикл?   -  person SLaks    schedule 20.06.2014
comment
Да. Мы не бесплатная служба написания кода для вас. Покажите, что вы делали, и что вы не можете понять.   -  person La-comadreja    schedule 20.06.2014
comment
str это не строка, это массив между прочим   -  person Kevin L    schedule 20.06.2014
comment
Вы пытались проверить, что означает эта ошибка?   -  person Sotirios Delimanolis    schedule 20.06.2014


Ответы (3)


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

    // initialize
    ArrayList<String[]> list = new ArrayList<String[]>();
    list.add(new String[] {"Vial1","Dest1"});
    list.add(new String[] {"Vial2","Dest2"});
    list.add(new String[] {"Vial3","Dest3"});
    list.add(new String[] {"Vial4","Dest4"});

    // writer
    FileWriter writer = new FileWriter("output.txt"); 

    // headers
    writer.write("VialNo,DestinationNo\n");
    writer.flush();

    // data
    for(String[] arr: list) {
        String appender = "";
        for(String s : arr){
            writer.write(appender + s);
            appender = ",";
        }
        writer.write("\n");
        writer.flush();
    }
    writer.close();
}

Это дало мне результат

VialNo,DestinationNo
Vial1,Dest1
Vial2,Dest2
Vial3,Dest3
Vial4,Dest4

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

Обновленный код для включения создания заголовков

person Mike Elofson    schedule 20.06.2014
comment
Обновил ответ, чтобы он также создавал заголовки. - person Mike Elofson; 20.06.2014
comment
Рад это слышать, рад, что смог помочь! - person Mike Elofson; 20.06.2014

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

person Community    schedule 20.06.2014

В случае, если принятый ответ не сработал для кого-то (не для меня). Попробуйте это для ArrayList определенных типов классов, например ArrayList tester = new ArrayList();

открытый класс PassDataToFile {

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

    RSSFeedParser parser = new RSSFeedParser("http://feeds.reuters.com/reuters/technologysectorNews");
    Feed feed = parser.readFeed();

    String input = "C:\\Users\\Special\\workspace\\demo.txt";
    File newFile = new File(input);

    if (!newFile.exists()){
        newFile.createNewFile();
    }

        FileWriter writer = new FileWriter(newFile.getAbsoluteFile());

        int sx = feed.getMessages().size();
        for (int i = 0; i < sx; i++) {

            writer.write(feed.getMessages().get(i).toString() + "\n");
        }
        writer.close();

        System.out.println("File successfully written into "  + input);

    } catch (IOException e) {
        System.out.println("File writing operation failed ");
        e.printStackTrace();
    }


} 

}

person SyCode    schedule 26.06.2015