본문 바로가기

배운 책들 정리/자바 완전 정복

자바의 정석 14 - 입출력

1 팁

1. 

 

 

 

2 복습

1. 

 

스킵

 

 

3 이론

1. 입출력

 

 

 

 

4 실습

1.  파일 입출력 (저장, 불러오기)

 

 

package j0531;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class C0531_02 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 객체선언
        StuProcess sp = new StuProcess();
        List<Student> list = new ArrayList<Student>();
        int choice = 0;
        int stuCount = list.size() + 1;
        ; // 학번
          // list.add(new Student(1, "홍길동", 100, 100, 99));
          // list.add(new Student(2, "유관순", 99, 99, 98));

        while (true) {
            System.out.println("[학생 성적 처리 프로그램]");
            System.out.println("1. 학생입력");
            System.out.println("2. 학생출력");
            System.out.println("8. 파일에서 가져오기");
            System.out.println("9. 파일저장하기");
            System.out.println("--------------------------");
            System.out.println("원하는 번호를 입력하세요");
            choice = scan.nextInt();

            switch (choice) {
                case 1:
                    // 메소드호출 후 데이터 전달 받음
                    stuCount = list.size() + 1;
                    Map<String, Object> map = sp.stuInput(list, stuCount);
                    list = (List<Student>) map.get("list");
                    stuCount = (int) map.get("stuCount");
                    break;

                case 2:
                    // 메소드호출(매개변수 전달)- list
                    list = sp.stuOutput(list);
                    break;

                case 8:
                    list = sp.stuRead();
                    System.out.println("파일 읽어오기가 완료되었습니다.");
                    System.out.println();
                    break;

                case 9:
                    sp.stuSave(list);
                    System.out.println("[학생 성적이 저장 되었습니다]");
                    break;

            }// switch

        } // while

    }// main
}
package j0531;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class StuProcess {
    Scanner scan = new Scanner(System.in);
    int stuNo;
    String name;
    int kor, eng, math;

    // 파일 저장하기
    void stuSave(List<Student> list) {
        String data = "";
        // System.out.printf("%d,%s,%d,%d,%d", list.get(0).getStuNo(),
        // list.get(0).getName(), list.get(0).getKor(),
        // list.get(0).getEng(), list.get(0).getMath());

        for (int i = 0; i < list.size(); i++) {
            data += String.format("%d,%s,%d,%d,%d \r \n", list.get(i).getStuNo(), list.get(i).getName().trim(),
                    list.get(i).getKor(),
                    list.get(i).getEng(), list.get(i).getMath());
        }

        // String data = "1,홍길동,100,100,99\r\n2,유관순,99,99,98 \r\n3,이순신,88,88,87 \r\n";
        // 파일 저장
        FileWriter fw = null;
        try {
            fw = new FileWriter("c:/savedata/student.txt");
            fw.write(data);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                fw.close();

            } catch (Exception e2) {
                // TODO: handle exception
                e2.printStackTrace();
            }
        }
        System.out.println("저장되었습니다.");
    }

    // 읽어오기
    List<Student> stuRead() {

        // int stuNo = 0;
        // String name = "";
        // int kor = 0, eng = 0, math = 0;
        List<Student> list = new ArrayList<Student>();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("c:/savedata/student.txt"));
            String data = "";
            while (true) {
                data = br.readLine();// data = "1,홍길동 ....."
                String[] dataArr = data.split(","); // 1,홍길동,100 .....
                if (data == null)
                    break;
                stuNo = Integer.parseInt(dataArr[0]);
                name = dataArr[1];
                kor = Integer.parseInt(dataArr[2]); // 정수형으로 형변환
                eng = Integer.parseInt(dataArr[3]); // 정수형으로 형변환
                math = Integer.parseInt(dataArr[4]); // 정수형으로 형변환
                list.add(new Student(stuNo, name, kor, eng, math));

            }
        } catch (

        Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            try {
                br.close();
            } catch (Exception e2) {
                // TODO: handle exception
                e2.printStackTrace();

            }
        }

        return list;
    }

    // 리턴타입 메소드명
    List<Student> stuOutput(List<Student> list) {
        System.out.println("[학생성적 출력화면]");

        //
        String[] title = { "학번", "이름", "국어", "영어", "수학", "합계", "평균", "등수" };
        // 출력
        System.out.println("[학생성적 출력화면]");
        System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s \n",
                title[0], title[1], title[2], title[3], title[4], title[5], title[6], title[7]);

        System.out.println("--------------------------------------------------");
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\t%d \n",
                    s.getStuNo(), s.getName(), s.getKor(), s.getEng(), s.getMath(),
                    s.getTotal(), s.getAvg(), s.getRank());
        }
        System.out.println();

        return list;
    }// stuOutput

    // 리턴타입 메소드명 (학생성적 입력)
    Map<String, Object> stuInput(List<Student> list, int stuCount) {
        // 반복
        while (true) {
            System.out.println("[학생성적 입력]");
            System.out.println(stuCount + "번째 이름을 입력하세요. (0.이전페이지 이동)");
            name = scan.next();
            if (name.equals("0")) {
                System.out.println("[이전페이지 이동]");
                break;
            }
            System.out.println("국어점수 입력하세요");
            kor = scan.nextInt();
            System.out.println("영어점수 입력하세요");
            eng = scan.nextInt();
            System.out.println("수학점수 입력하세요");
            math = scan.nextInt();
            // 새로운 Student 객체를 생성하여 입력 받은 값을 이용해 초기화하고, 리스트에 추가합니다.
            // stuCount : 학생 학번
            // ![]2023-05-31-17-01-04.png
            list.add(new Student(stuCount, name, kor, eng, math));
            stuCount++; // 1증가
        } // while

        System.out.println();
        // list,stuCount 2개를 담는 Map 생성
        // list : 학생 정보
        // stuCount : 입력된 학생의 수를 나타내는 변수

        // ![]2023-05-31-16-56-26.png
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("list", list); // list=list
        map.put("stuCount", stuCount); // stuCount=4

        return map;
    }// map

}

 

2. List 사용법

 

 

main

package j0531_02;

import java.util.ArrayList;
import java.util.List;

import j0531.Student;

public class C0531_08 {
    public static void main(String[] args) { // throw exception 넣으면 try catch 필요 없음
        // 객체선언
        DataClass d = new DataClass();
        int num1 = 10;
        int num2 = 5;
        int sum = d.numAdd(num1, num2);
        System.out.println(sum * 2);

        int kor = 100, eng = 100, math = 99;
        Student s = d.stuAdd(kor, eng, math);
        System.out.println(s.getTotal());

        // 학번, 이름을 출력하시오.
        List<Student> list = d.stuList(); // 리스트 형태에서 stuList 정보 선언하기
        // int num = 0; (타입) (이름) = (정보) 선언

        for (int i = 0; i < list.size(); i++) {
            System.out.printf("%d, %s \n", list.get(i).getStuNo(), list.get(i).getName());
        }

    }
}

 

class

 

package j0531_02;

import java.util.ArrayList;
import java.util.List;

import j0531.Student;

public class DataClass {
    int numAdd(int num1, int num2) { // 리턴 타입이 같아야 함
        System.out.println("더하기");
        int sum = num1 + num2;
        return sum;
    }

    Student stuAdd(int kor, int eng, int math) {
        System.out.println("학생성적추가");
        int stuNo = 1;
        String name = "홍길동";
        Student s = new Student(stuNo, name, eng, math, kor);

        return s;

    }

    List<Student> stuList() {
        List<Student> list = new ArrayList<Student>(); // 다형성을 위해 사용
        // ArrayList<Student> list = new ArrayList<Student>();
        System.out.println("list");

        list.add(new Student(1, "홍길동", 100, 100, 100));
        list.add(new Student(2, "이순신", 90, 90, 90));

        return list;

    }

}

 

student (this, get, set  클래스)

 

package j0531;

import java.util.Properties;
import java.util.Objects;

public class Student {
    Student() {
    }

    public Student(int stuNo, String name, int kor, int eng, int math) {
        this.stuNo = stuNo;
        this.name = name;
        this.kor = kor;
        this.eng = eng;
        this.math = math;
        this.total = kor + eng + math;
        this.avg = this.total / 3.0;

    }

    private int stuNo;
    private String name;
    private int kor;
    private int eng;
    private int math;
    private int total;
    private double avg;
    private int rank;

    public int getStuNo() {
        return stuNo;
    }

    public void setStuNo(int stuNo) {
        this.stuNo = stuNo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getKor() {
        return kor;
    }

    public void setKor(int kor) {
        if (kor > 100) {
            return;
        }
        this.kor = kor;
    }

    public int getEng() {
        return eng;
    }

    public void setEng(int eng) {
        this.eng = eng;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public double getAvg() {
        return avg;
    }

    public void setAvg(double avg) {
        this.avg = avg;
    }

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }

}

 

5 문제풀이

1. 

 

 

 

6 단축키

1. 

 

 

 

 

* 핵심

- 파일 불러오기, 저장하기에 대해 확실히 알기

 

 

 

 

* 0531 실습 링크

 

 

GitHub - RosePaku/bigdata_java: 빅데이터_자바의_정석

빅데이터_자바의_정석. Contribute to RosePaku/bigdata_java development by creating an account on GitHub.

github.com

 

728x90
반응형
LIST