如何使我的HashMap正确打印到文件

时间:2019-04-26 14:41:38

标签: java hashmap

我正在一个项目中,我有一个文件,程序可以访问该文件来获取多年以来不同犯罪的信息。然后,它需要根据类型将犯罪加在一起,并将其放入文件中。我有第一部分内容,它可以访问文件并按类型累加犯罪金额,但是当我打开创建的文件时,它无法正确打印出来,而且我似乎找不到任何问题。

这是打印在文件上的内容:

  

¬ísrjava.util.HashMapÚÁÃ`ÑF   loadFactorI thresholdxp?@ w
  t暴力犯罪Totalsrjava.lang.Integerä÷‡8 I valuexr java.lang.Number†¬•“à‹xp¤MtRapesq〜jt   车辆盗窃〜{™t加重突袭q〜k凶杀案q〜Robberysq〜N   t非住宅盗窃案〜kÿt住宅盗窃案〜ãt财产犯罪总数〜盗窃案〜:cx

使用system.out.println打印:

  

{暴力犯罪总数= 42061,强奸= 1898,车辆盗窃= 97177,严重袭击= 27523,凶杀= 399,抢劫= 19981,非住宅盗窃= 27647,住宅盗窃= 58238,财产犯罪总数= 454505,盗窃= 342627}

我要在文件中显示的系统打印出来。

public class CSVReader {

    public static void main(String[] args) throws FileNotFoundException {
        String csvFile = "C:\\Users\\Cassie\\Desktop\\mod04_dataset.csv";
        BufferedReader br = null;
        String line = "";
        String cvsSplitBy = ",";
        HashMap<String, Integer> map = new HashMap<>();

        try {

            br = new BufferedReader(new FileReader(csvFile));

            br.readLine();

            while ((line = br.readLine()) != null) {

                String[] data = line.split(cvsSplitBy);

                System.out.println(data[2] + " " + data[3]);

                if (map.containsKey(data[2])) {

                    Integer a = map.get(data[2]);
                    map.put(data[2], a + Integer.parseInt(data[3]));
                }

                else {
                    map.put(data[2], Integer.parseInt(data[3]));

                }

              } 

              FileOutputStream f = new 
              FileOutputStream("hashmap.ser");  
              ObjectOutputStream s = new ObjectOutputStream(f);          
              s.writeObject(map);
              System.out.println(map);
              s.close();
              f.close();


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {       
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

致电System.out.println(map);时,您会看到map.toString()的结果。如果这是文件中要包含的内容,则可以这样操作:

FileOutputStream f = new FileOutputStream("hashmap.ser");  
f.write(map.toString().getBytes());
System.out.println(map);
f.close();

答案 1 :(得分:0)

您应该使用PrintWriter,因为您正在输出二进制数据