Как заставить мой HashMap правильно распечатать файл - PullRequest
0 голосов
/ 26 апреля 2019

Я работаю над проектом, в котором у меня есть файл, к которому программа обращается, чтобы получить информацию о различных преступлениях за несколько лет. Затем необходимо сложить преступление на основе типа и поместить его в файл. У меня есть первая часть, она обращается к файлу и суммирует количество преступлений по типу, но когда я открываю созданный файл, он распечатывается неправильно, и я не могу найти, что не так.

Вот что распечатывается в файле:

¬í sr java.util.HashMapÚÁÃ`Ñ F loadFactorI thresholdxp? @ w
t Насильственные преступления Тоталср java.lang.Integerâ 8 ÷ ‡ 8 I valuexr java.lang.Number † ¬ • ”à‹ xp ¤Mt Rapesq ~ jt Автомобиль Theftsq ~ {™ t Нападения при отягчающих обстоятельствах ~ komt Homicidesq ~ t Robberysq ~ N t Нежилой Burglarysq ~ kÿt Жилой Burglarysq ~ â ~ t Преступления собственности Totalsq ~ ïit Theftsq ~: 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 голосов
/ 26 апреля 2019

Вы должны использовать PrintWriter, потому что вы не выводите двоичные данные

0 голосов
/ 26 апреля 2019

Когда вы звоните System.out.println(map);, вы видите результат map.toString().Если это то, что вы хотите иметь в файле, вы можете сделать это так:

FileOutputStream f = new FileOutputStream("hashmap.ser");  
f.write(map.toString().getBytes());
System.out.println(map);
f.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...