카테고리 없음

1219 Java(File읽기, Json)

버스창문 2025. 12. 19. 17:27
public static void Q6() throws IOException
    {
        //FileReader fr = new FileReader("D:\\VSCode\\JavaTest\\Input.txt");
        String filePath = "Input.txt";
        FileReader fr;
        fr = new FileReader(filePath);

        var a1 =  fr.readAllLines();
        Map<String,Integer> a2 = new HashMap();

        for (String string : a1) 
        {
            var tempStr = string.split(" ");
            for (String str : tempStr) {
                a2.put(str, a2.getOrDefault(str, 0) + 1);  
            }
        }
        System.out.println(a2);
        fr.close();
        
    }

아예 함수를 선언할때 옆에 throws 로 에러 처리를 붙여둘 수 있다.

file관련 작업한다면 반드시 붙여놔야 에러가 나지않는다

Map 이 사실상 Dictionary이다

분명 Map으로 선언했지만 그 뒤에 new로 초기화하는건 짜잔 HashMap이라는 어디에도 선언된적없는 새로운게 붙어야만 작동한다

그 아래는 그냥 너무나 당연한 상황인데 실질적으로 활용하는 부분도 남다르다

그냥 a2[키값] 이렇게 해서 Dictionary처럼 쓸수있겠거니라는 내 생각과는 매우 다르게, 해당 키값을 다시 집어넣는 사상최초 미쳐버린 방법을 사용해야 정상작동한다.

getOrDefault(키값, 디폴트값)라는 함수를 이용해서 해당 값이 없으면 두번째 매개변수로 들어간 디폴트값을 반환시켜 만약 있으면 기존 값+1 해서 새값을 넣고 없으면 0으로 넣는다

 

json활용법

그냥 활용을 못했다

public static void Q7() throws Exception
    {
        BufferedReader br = new BufferedReader(new FileReader("Json.json"));
        StringBuilder sb = new StringBuilder();
        String line;

        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        br.close();

        String json = sb.toString();

        List<Monster> monsters = parseMonsters(json);

        // HP 기준 정렬
        monsters.sort((a, b) -> a.hp - b.hp);

        for (Monster m : monsters) {
            System.out.println(m);
        }
    }
        static List<Monster> parseMonsters(String json) {
        List<Monster> list = new ArrayList<>();

        // [ { ... }, { ... } ] → 객체 단위로 쪼갬
        json = json.substring(1, json.length() - 1); // [ ]
        String[] objects = json.split("\\},\\{");

        for (String obj : objects) {
            obj = obj.replace("{", "").replace("}", "");

            String[] fields = obj.split(",");
            String name = "";
            int hp = 0;
            int atk = 0;

            for (String field : fields) {
                String[] kv = field.split(":");
                String key = kv[0].replace("\"", "").trim();
                String value = kv[1].replace("\"", "").trim();

                switch (key) {
                    case "name": name = value; break;
                    case "hp": hp = Integer.parseInt(value); break;
                    case "atk": atk = Integer.parseInt(value); break;
                }
            }

            list.add(new Monster(name, hp, atk));
        }
        return list;
    }

그냥 txt파일마냥 불러와서 잘라서 쓰는 쓰래기방법을 활용했는데 이건 다 이유가 있다.

맨 처음 확인했던 방법은 

org.json

org를 못찾는다.

모든 재앙의 시초

역대 최악의 언어

없으면 추천을 안해야지 무슨 말도안되게 추천해주길래 당연히 난 그게 있는줄알고 썼는데 뭐하나 되는게 없다.

 

아하 내가 다운로드를 안했구나!

그렇게 쓴 두번째 방법

https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind

 

 

여기서 Databind, Core, annotations 다운받아서, lib에 집어넣고, 

그러고도 안되길래 ChatGPT까지 동원해서 왜안되는지 체크해서 되게하고

 

하지만 짜잔 그러고도 안됐다

역대 최고의 언어, J O A T(Java Goat 라는뜻)

 

그리고 또 해본 방법

https://code.google.com/archive/p/json-simple/downloads

 

Google Code Archive - Long-term storage for Google Code Project Hosting.

 

code.google.com

 

https://www.youtube.com/watch?v=g6vvEEm2hhs&feature=youtu.be

 

 

 

짜잔 그러고도 안됐다