Java 如何将HashMap写入CSV?
我有一个方法Java 如何将HashMap写入CSV?,java,csv,Java,Csv,我有一个方法countOcc(),它打印一个列表(如下) 方法: public void countOcc(ArrayList<Integer> list) { String aout = new String(); System.out.println("\n"); Integer[] numbers = list.toArray(new Integer[list.size()]); Map<Integer, Integer> ma
countOcc()
,它打印一个列表(如下)
方法:
public void countOcc(ArrayList<Integer> list) {
String aout = new String();
System.out.println("\n");
Integer[] numbers = list.toArray(new Integer[list.size()]);
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < numbers.length; i++) {
int key = numbers[i];
if (map.containsKey(key)) {
int occurrence = map.get(key);
occurrence++;
map.put(key, occurrence);
} else {
map.put(key, 1);
}
}
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
int key = (Integer) iterator.next();
int occurrence = map.get(key);
System.out.println(key+":00"+ " ==> " + occurrence + " hits(s)");
}
}
我知道opencsv,但我真的不知道如何在HashMap中使用它。,写入CSV文件就像写入文本文件一样
public static void write()
{
StringBuilder out = new StringBuilder();
for (int key : map.keySet())
{
out.append(key + ":00,");
}
// remove last ',' from line
out = new StringBuilder(out.substring(0, out.length() - 1));
for (int occurence : map.values())
{
out.append(occurence + ",");
}
// remove last ',' from line
out = new StringBuilder(out.substring(0, out.length() - 1));
try (FileWriter fw = new FileWriter("my.csv"))
{
writer.append(out.toString());
}
catch (IOException e)
{
e.printStackTrace();
}
}
抄袭:
Map values=newhashmap();
用于(字符串行:行){
String[]parts=line.split(“”);
字符串时间=部分[0];
字符串值=零件[2];
价值。投入(时间、价值);
}
StringWriter编写器=新建StringWriter();
CSVWriter writer=新的CSVWriter(writer);
writerText(values.keySet().toArray());
writerText(values.values().toArray());
writer.close();
System.out.println(writer.toString());
这将提供您的输出。以下是写入CSV文件的示例,您可以相应地对其进行自定义:
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CsvFileWriter {
//Delimiter used in CSV file
private static final String COMMA_DELIMITER = ",";
private static final String NEW_LINE_SEPARATOR = "\n";
//CSV file header
private static final String FILE_HEADER = "id,firstName,lastName,gender,age";
public static void writeCsvFile(String fileName) {
//Create new students objects
Student student1 = new Student(1, "Ahmed", "Mohamed", "M", 25);
Student student2 = new Student(2, "Sara", "Said", "F", 23);
Student student3 = new Student(3, "Ali", "Hassan", "M", 24);
Student student4 = new Student(4, "Sama", "Karim", "F", 20);
Student student5 = new Student(5, "Khaled", "Mohamed", "M", 22);
Student student6 = new Student(6, "Ghada", "Sarhan", "F", 21);
//Create a new list of student objects
List students = new ArrayList();
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
students.add(student6);
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(fileName);
//Write the CSV file header
fileWriter.append(FILE_HEADER.toString());
//Add a new line separator after the header
fileWriter.append(NEW_LINE_SEPARATOR);
//Write a new student object list to the CSV file
for (Student student : students) {
fileWriter.append(String.valueOf(student.getId()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(student.getFirstName());
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(student.getLastName());
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(student.getGender());
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(student.getAge()));
fileWriter.append(NEW_LINE_SEPARATOR);
}
System.out.println("CSV file was created successfully !!!");
} catch (Exception e) {
System.out.println("Error in CsvFileWriter !!!");
e.printStackTrace();
} finally {
try {
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
System.out.println("Error while flushing/closing fileWriter !!!");
e.printStackTrace();
}
}
}
}
你调查过吗?该框架具有内置的CsvMapWriter: 基本上,您可以将头定义为一个数组(可以使用映射的排序键集),然后使用以下命令编写映射:
mapWriter.write(map, header, processors);
您可能需要:
public static void countOcc(List<Integer> list) {
Map<Integer, Integer> map = new HashMap<>();
for (Integer key : list) {
if (map.containsKey(key)) {
map.put(key, map.get(key) + 1);
} else {
map.put(key, 1);
}
}
String csv = "d://data.csv";
try (CSVWriter writer = new CSVWriter(new FileWriter(csv))) {
String[] keysArray = new String[map.keySet().size()];
String[] valuesArray = new String[map.values().size()];
int counter = 0;
for (Entry<Integer, Integer> entry : map.entrySet()) {
keysArray[counter] = entry.getKey() + ":00";
valuesArray[counter] = entry.getValue() + "";
counter++;
}
writer.writeNext(keysArray);
writer.writeNext(valuesArray);
} catch (IOException e) {
e.printStackTrace();
}
}
publicstaticvoidcountocc(列表){
Map Map=newhashmap();
for(整型键:列表){
if(地图容器(图例)){
map.put(键,map.get(键)+1);
}否则{
地图放置(图例1);
}
}
String csv=“d://data.csv”;
try(CSVWriter writer=new-CSVWriter(new-FileWriter(csv))){
String[]keysArray=新字符串[map.keySet().size()];
String[]valuesArray=新字符串[map.values().size()];
int计数器=0;
for(条目:map.entrySet()){
KeyArray[计数器]=entry.getKey()+“:00”;
valuesArray[counter]=entry.getValue()+“”;
计数器++;
}
writerText(keysArray);
writer.writeNext(valuesArray);
}捕获(IOE异常){
e、 printStackTrace();
}
}
keySet()和values()方法调用的顺序不能保证相同。因此,您可能会得到与内容行不匹配的标题-而且您的标题也不会被排序。它给了我OP显示的顺序,并且始终如此。如果可以重用现有的、经过良好测试的框架,shrugI不明白为什么要自己编写这篇文章。另外:您的代码不应该使用硬编码的行分隔符-您应该使用系统的值-否则您的代码只能在Windows中工作,而不能在例如Linux(或其他方式)中工作。请参阅Stackflow thread中的解决方案
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CsvFileWriter {
//Delimiter used in CSV file
private static final String COMMA_DELIMITER = ",";
private static final String NEW_LINE_SEPARATOR = "\n";
//CSV file header
private static final String FILE_HEADER = "id,firstName,lastName,gender,age";
public static void writeCsvFile(String fileName) {
//Create new students objects
Student student1 = new Student(1, "Ahmed", "Mohamed", "M", 25);
Student student2 = new Student(2, "Sara", "Said", "F", 23);
Student student3 = new Student(3, "Ali", "Hassan", "M", 24);
Student student4 = new Student(4, "Sama", "Karim", "F", 20);
Student student5 = new Student(5, "Khaled", "Mohamed", "M", 22);
Student student6 = new Student(6, "Ghada", "Sarhan", "F", 21);
//Create a new list of student objects
List students = new ArrayList();
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
students.add(student6);
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(fileName);
//Write the CSV file header
fileWriter.append(FILE_HEADER.toString());
//Add a new line separator after the header
fileWriter.append(NEW_LINE_SEPARATOR);
//Write a new student object list to the CSV file
for (Student student : students) {
fileWriter.append(String.valueOf(student.getId()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(student.getFirstName());
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(student.getLastName());
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(student.getGender());
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(student.getAge()));
fileWriter.append(NEW_LINE_SEPARATOR);
}
System.out.println("CSV file was created successfully !!!");
} catch (Exception e) {
System.out.println("Error in CsvFileWriter !!!");
e.printStackTrace();
} finally {
try {
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
System.out.println("Error while flushing/closing fileWriter !!!");
e.printStackTrace();
}
}
}
}
mapWriter.write(map, header, processors);
public static void countOcc(List<Integer> list) {
Map<Integer, Integer> map = new HashMap<>();
for (Integer key : list) {
if (map.containsKey(key)) {
map.put(key, map.get(key) + 1);
} else {
map.put(key, 1);
}
}
String csv = "d://data.csv";
try (CSVWriter writer = new CSVWriter(new FileWriter(csv))) {
String[] keysArray = new String[map.keySet().size()];
String[] valuesArray = new String[map.values().size()];
int counter = 0;
for (Entry<Integer, Integer> entry : map.entrySet()) {
keysArray[counter] = entry.getKey() + ":00";
valuesArray[counter] = entry.getValue() + "";
counter++;
}
writer.writeNext(keysArray);
writer.writeNext(valuesArray);
} catch (IOException e) {
e.printStackTrace();
}
}