Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将HashMap写入CSV?_Java_Csv - Fatal编程技术网

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