java将列表字符串写入csv文件 [英] java write the list string into csv file

查看:408
本文介绍了java将列表字符串写入csv文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些数组字符串,如下所示(注意,每个播放器后面显示不同的行...),

  [user1,track1,player1,user1,track2,player2,user1,track3,player3,...] code> 

我想根据行数(这里的空格)将这个数组分成两部分(几乎相等)。因此,例如,如果在这个数组中有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)){
//在缓冲同一个用户ID时执行我们需要的操作
}
else {
list.add(uLine) ;
int division =(int)Math.ceil(list.size()/ 2);

List< String> sublist = list.subList(0,division); //将每个用户的数据映射到两个ALMOST等式部分,将它们放在子列表中的第一个

//这里我需要将SUBLIST的输出写入CSV文件,但是如何? ??
output.write(sublits); // - >这不是工作,从SUBLIST不是一个字符
currentUserId = userId;
list.clear();
}
list.add(uLine);
}
userlines.close();
output.close();
}

有人可以帮我知道如何在列表字符串到一个空的csv文件?
我的第二个问题是:如果有空间,我可以将它们分开,并将其视为一行。



谢谢,

$ b $您已考虑使用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对象串联它们,使用您提供的分隔符。输出然后loolks像:

  Word1,Word2,Word3,Word4 
pre>

我希望能解决你的问题。让我知道如果事情不清楚。



Artur



编辑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); //去掉方括号
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(\\\
); // newline
}

writer.close();

}

生成的文件如下所示:

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


I have some array strings like the following (note that there is space after each player which shows different lines...),

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

I would like to divide this array into two parts (almost equal) based on the number of lines (spaces here). So, for example if there is 40 spaces in this array, I need to store the lines starting from the first to the half(20th line) in a file (let's call it file A) and put the rest in file B. I could divide the arraylist, but I could not write it in the correct way in the CSV file.

Here is my code:

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();
}

Could someone please help me know how could I write the data in a list string into an empty csv file?? My second question is: how could I split them wherever there is space and consider it as a line..

Thanks,

解决方案

have you considered using OpenCSV for writing your values:http://opencsv.sourceforge.net/

There is an example of how to write CSV files and it is very easy.

As to your problem, it appears you can't write the values because the Arraylist toString method will not return a comma separated string. You can use this:

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();

}

See the collector impl - it will collect all String objects and concatinate them, using the separator you provide. The output then loolks like:

Word1,Word2,Word3,Word4

I hope that fixes your problem. Let me know if something's not clear.

Artur

Edit 2, for your question.

If your input is a String that you read, you can split it by the space first to get it in separated lines. If it is an actual array, it won't work. This is my example:

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();

    }

The resulting file looks like this:

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

这篇关于java将列表字符串写入csv文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆