java将列表字符串写入csv文件

摩纳

我有一些类似于以下的数组字符串(请注意,每个播放器后面都有空格,显示不同的行...),

["user1","track1","player1", "user1","track2","player2", "user1","track3","player3", ...] 

我想根据行数(此处为空格)将该数组分为两部分(几乎相等)。因此,例如,如果此数组中有40个空格,我需要将第一行到第二行(第20行)的行存储在一个文件中(我们称其为文件A),然后将其余的行存储在文件B中。划分arraylist,但是我无法以正确的方式将其写入CSV文件。

这是我的代码:

public static void main(String[] args) throws java.lang.Exception { 
BufferedReader userlines = new BufferedReader(new FileReader("/..../usertrackplayer.csv"));       
FileWriter output = new FileWriter(new File("/.../output.csv"));

String uLine = null;    
ArrayList<String> list = new ArrayList<String>();
List<String> arrayList = new ArrayList<String>();
String currentUserId = null;        

while ((uLine = userlines.readLine()) != null) {

    String[] userData = uLine.split(",");
    String userId = userData[0];            
    if (userId.equals(currentUserId)) {
      // Do what ever we need while buffering same userId               
    }
    else{
        list.add(uLine);
        int division = (int) Math.ceil(list.size()/2);

        List<String> sublist = list.subList(0, division); //TO DEVIDE THE DATA OF EACH USERID INTO TWO ALMOST EQUAL PARTS, IT PUT THE FIRST HALF IN SUBLIST

     //HERE I NEED TO WRITE THE OUTPUT OF SUBLIST INTO A CSV FILE, BUT HOW????
            output.write(sublits); //--> THIS DOES NOT WORK SINCE SUBLIST IS NOT A STRING
            currentUserId = userId;
            list.clear();
    }       
     list.add(uLine);
}
    userlines.close();
    output.close();
}

有人可以帮我知道如何将列表字符串中的数据写入一个空的csv文件吗?我的第二个问题是:如何在有空间的地方将它们拆分,并将其视为一条线。

谢谢,

潘达卜

您是否考虑过使用OpenCSV编写值:http ://opencsv.sourceforge.net/

有一个如何编写CSV文件的示例,这很容易。

对于您的问题,看来您无法编写值,因为Arraylist toString方法不会返回逗号分隔的字符串。您可以使用此:

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

    FileWriter writer = new FileWriter("/Users/artur/tmp/csv/sto1.csv");

    List<String> test = new ArrayList<>();
    test.add("Word1");
    test.add("Word2");
    test.add("Word3");
    test.add("Word4");

    String collect = test.stream().collect(Collectors.joining(","));
    System.out.println(collect);

    writer.write(collect);
    writer.close();

}

请参阅收集器impl-它将使用您提供的分隔符收集所有String对象并对其进行隐化处理。输出如下:

Word1,Word2,Word3,Word4

我希望能解决您的问题。让我知道是否不清楚。

阿图尔

编辑2,询问您的问题。

如果您输入的内容是您读取的字符串,则可以先按空格将其拆分,以将其分成几行。如果它是一个实际的数组,它将无法正常工作。这是我的示例:

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

        String input = "[\"user1\",\"track1\",\"player1\", \"user1\",\"track2\",\"player2\", \"user1\",\"track3\",\"player3\"]";
        input = input.substring(1, input.length() - 1); // get rid of brackets
        String[] split = input.split(" ");

        FileWriter writer = new FileWriter("/Users/artur/tmp/csv/sto1.csv");

        for(String s : split) {
            String[] split2 = s.split(",");
            writer.write(Arrays.asList(split2).stream().collect(Collectors.joining(",")));
            writer.write("\n"); // newline
        }

        writer.close();

    }

生成的文件如下所示:

"user1","track1","player1"
"user1","track2","player2"
"user1","track3","player3"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章