java 将列表字符串写入csv文件
java write the list string into csv file
我有一些像下面这样的数组字符串(注意每个玩家后面有 space 显示不同的行...),
["user1","track1","player1", "user1","track2","player2", "user1","track3","player3", ...]
我想根据行数(space这里)将这个数组分成两部分(几乎相等)。因此,例如,如果此数组中有 40 spaces,我需要将从第一行到一半(第 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 文件吗?
我的第二个问题是:我怎么能在有 space 的地方拆分它们并将其视为一条线..
谢谢,
您是否考虑过使用 OpenCSV 来写入您的值:http://opencsv.sourceforge.net/
有写CSV文件的例子,很简单
至于您的问题,您似乎无法写入值,因为 Arraylist toString 方法不会 return 逗号分隔的字符串。你可以使用这个:
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();
}
查看收集器实现 - 它将收集所有 String 对象并使用您提供的分隔符连接它们。然后输出看起来像:
Word1,Word2,Word3,Word4
希望这能解决您的问题。让我知道是否有不清楚的地方。
阿图尔
编辑 2,针对您的问题。
如果您的输入是您读取的字符串,您可以先将其拆分为 space 以将其分成不同的行。如果它是一个实际的数组,它将不起作用。这是我的例子:
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"
我有一些像下面这样的数组字符串(注意每个玩家后面有 space 显示不同的行...),
["user1","track1","player1", "user1","track2","player2", "user1","track3","player3", ...]
我想根据行数(space这里)将这个数组分成两部分(几乎相等)。因此,例如,如果此数组中有 40 spaces,我需要将从第一行到一半(第 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 文件吗? 我的第二个问题是:我怎么能在有 space 的地方拆分它们并将其视为一条线..
谢谢,
您是否考虑过使用 OpenCSV 来写入您的值:http://opencsv.sourceforge.net/
有写CSV文件的例子,很简单
至于您的问题,您似乎无法写入值,因为 Arraylist toString 方法不会 return 逗号分隔的字符串。你可以使用这个:
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();
}
查看收集器实现 - 它将收集所有 String 对象并使用您提供的分隔符连接它们。然后输出看起来像:
Word1,Word2,Word3,Word4
希望这能解决您的问题。让我知道是否有不清楚的地方。
阿图尔
编辑 2,针对您的问题。
如果您的输入是您读取的字符串,您可以先将其拆分为 space 以将其分成不同的行。如果它是一个实际的数组,它将不起作用。这是我的例子:
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"