본문 바로가기

JAVA

Java_11강

  날짜와 시간(Calender class)

1. 활용 클래스

  • java.util 패키지 Date, Calendar class
  • java.time 패키지 simpleDateFormat class

2. simpleDateFormat의 날짜와 시간 표기 기호

  • G : AD, BC 등 연호
  • y : 연도 / M : 월 / d : 일 / E : 요일
  • a : 오전, 오후 / h : 시 / m : 분 / s :  초 / SSS : 밀리초
  • k/H : 24시간 주기 시
  • W : week of year / W : week of month
  • D : day of year / F : day of week
package datetime;

import org.w3c.dom.ls.LSOutput;

import java.util.Calendar;

public class CalendarTest {
    public static void main(String[] args) {
        // Calendar 인스턴스 생성
        Calendar cal = Calendar.getInstance();
        // System.out.println(cal);

        // 연도 구하기
        // 달(month)를 출력할 때는 +1을 해줘야 함
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH);
        int day = cal.get(Calendar.DATE);
        System.out.println(year + "년 " + month + "월 " + day + "일");

        int hour = cal.get(Calendar.HOUR);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);
        System.out.println(hour + "시 " + minute + "분 " + second + "초");

        // 달의 마지막 날 구하기
        int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE);
        System.out.println("이번 달의 마지막 날 : " + lastDayOfMonth);

        // 날짜 지정
        Calendar cal2 = Calendar.getInstance();
        // 연, 월, 일 지정
        cal2.set(Calendar.YEAR, 2022);
        cal2.set(Calendar.MONTH, 7); // 실제 월 -1 값을 입력
        cal2.set(Calendar.DATE, 1);
        System.out.println(cal2);

        // 시작일의 요일(1: 일요일, 7: 토요일)
        int startDay = cal2.get(Calendar.DAY_OF_WEEK);
        System.out.println(startDay);
        int lastDay = cal2.getActualMaximum(Calendar.DATE);
        System.out.println(lastDay);
    }
}

////////////////////////////////////////////////////////////////////////////

package datetime;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
    public static void main(String[] args) {
        // Date class : 현재 시간을 저장한 인스턴스 생성
        Date today = new Date();
        System.out.println(today);

        // SimpleDateFormat : 원하는 형태로 날짜와 시간 형식을 지정.
        SimpleDateFormat sdf1 = new SimpleDateFormat("G yyyy-MM-dd");
        // 분(minute)과 달(month)을 표기하는 m이 동일하게 사용돼 month = MM으로 표기
        String daystr = sdf1.format(today);
        System.out.println(daystr);

        SimpleDateFormat sdf2 = new SimpleDateFormat("[a] hh:mm:ss.SSS");
        // [a] => 오전 오후 표기
        String timestr = sdf2.format(today);
        System.out.println(timestr);

        SimpleDateFormat sdf3 = new SimpleDateFormat("F w W D");
        // F : 요일(월:0) /  w : 1년 중 몇 번째 주인가 / W : 한 달 중 몇 번째 주인가
        // D : 1년 중 몇 번째 날인가 / d : 한 달 중 몇 번째 날인가
        String str = sdf3.format(today);
        System.out.println(str);
    }
}

 

3. Calendar class

Calendar class는 날짜와 시간의 보편적인 사용을 위한 클래스이다. 싱클톤(Singleton) 패턴을 사용하여 인스턴스를 생성한다.

 

싱글톤 패턴)

싱클톤 패턴은 프로그램이 실행 중일 때 인스턴스를 하나만 생성하도록 제약하는 방식을 말한다. 인스턴스를 사용하려는 다른 클래스에서 만들지(생성하지) 못하게 하고 스스로 만들어서 인스턴스를 제공한다.

package singletonpkg;

public class SingletonTest {
    // 자신의 인스턴스를 저장하는 참조 변수(멤버) 선언
    private static SingletonTest instance = null;

    // 생성자는 private로 선언
    private SingletonTest() {
        // 다른 클래스에서 인스턴스를 못 만들도록 설정.
    }

    // 인스턴스를 제공하는 메소드를 정의
    public static SingletonTest getInstance() {
        if (instance == null) {
            instance = new SingletonTest();
        }
        return instance;
    }

    // 기타 기능 제공 메소드
    public void method1() {
        System.out.println("싱글톤이다!");
    }
}

//////////////////////////////////////////////////////////

package singletonpkg;

public class SingletonUse {
    SingletonTest st = SingletonTest.getInstance();
}

  파일(File)

프로그램에서 발생된 데이터를 유지하는 방법에는 두 가지가 있다.

  • 파일을 활용하는 방법
  • Database를 활용하는 방법

둘 중 파일을 활용하는 방법을 알아보려 한다.

 

File class는 파일과 폴더(디렉토리)를 다루는 데 사용하는 클래스이다. 여기서 폴더란 파일을 저장하는 공간이며 파일이나 서브 폴더의 정보를 저장하고 있는 '파일'을 의미한다. 파일은 보조기억장치(하드디스크, HDD, C: 또는 D:)에 저장된 상태의 데이터의 묶음을 말한다. 즉, 파일을 활용하려면 메모리에 적재되어 있어야 하며, 그 메모리에 적재하여 사용하는 클래스가 바로 File class이다.

 

파일 입출력)

입출력(input/output)의 기준은 프로그램이다.

  • 키보드 = 입력 / 모니터 = 출력
  • 파일로부터 입력(불러오기) / 파일로 출력(저장하기)

입출력이란 데이터의 연속된 흐름의 처리를 Stream이라고 하는데, 이 Stream은 단방향을 가진다.

필요한 클래스는 다음과 같다.

  • File class
  • 파일 입출력용 Stream class => FileInputStream/FileOutputStream : byte 단위 & FileReader/FileWriter : 문자 단위
  • 보조 입출력용 클래스 => BufferedReader/BufferedWriter : 문장/한줄 단위

1. 파일 정보/경로 확인 및 변경과 파일 생성/삭제

package filetest;

import java.io.File;
import java.io.IOException;

public class FileInfoEx {
    public static void main(String[] args) {
        // 1. 파일 정보 확인하기
        // 파일 객체 생성
        File f = new File("test.txt");

        try {
            boolean b = f.createNewFile(); // 파일 생성 메소드
            if (b == true) {
                System.out.println("파일 생성 성공");
            } else {
                System.out.println("이미 파일 존재");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("파일인가? " + f.isFile()); // 파일 존재 여부 및 파일/폴더 구분

        // 파일의 설정 정보 확인
        System.out.println("읽기 가능 : " + f.canRead());
        System.out.println("쓰기 기능 : " + f.canWrite());
        System.out.println("실행 기능 : " + f.canExecute());
        System.out.println("숨김 파일? " + f.isHidden());

        // 파일 존재 여부
        System.out.println("존재하는가? " + f.exists());
        // 파일 크기
        System.out.println("파일의 크기? " + f.length());
        // 상대 경로
        System.out.println("상대 경로 : " + f.getPath());
        // 절대 경로
        System.out.println("절대 경로 : " + f.getAbsolutePath());
        
        // 마지막 수정 시간
        System.out.println("수정 시간 : " + f.lastModified());
        // 시간과 관련하여 산출된 밀리초의 값의 시작은 1970년 1월 1일부터.

        // 파일 이름 변경
        File f2 = new File("test2.txt");
        boolean rb = f.renameTo(f2); // 이름을 바꾸는 것이지만 옮긴다는 의미가 큼

        if (rb == true) {
            System.out.println("변경 성공");
        } else {
            System.out.println("변경 실패");
        }

        // 파일 경로 변경
        File f3 = new File("target\\test2.txt");
        boolean rb2 = f2.renameTo(f3);

        if (rb2 == true) {
            System.out.println("이동 성공");
        } else {
            System.out.println("이동 실패");
        }

        // 파일 삭제
        if (f.exists()) {
            f.delete();
        }
    }
}

 

2. 폴더 생성 및 정보 확인, 변경/삭제

package filetest;

import java.io.File;

public class ForderTest {
    public static void main(String[] args) {
        //폴더 생성
        makeFolder();
        //폴더 정보 보기
        //folderInfo();
        //폴더 변경 : 파일의 이름 변경 및 경로 변경과 동일
        //폴더 삭제
        // deleteFolder();
    }

    private static void deleteFolder() {
        String path = "testfolder";

        File folder = new File(path);

        if(folder.exists()) {
            // 폴더 내부의 파일 및 폴더 삭제
            File[] list = folder.listFiles();

            // 폴더 내부에 파일이 있으면 폴더 삭제 불가
            // 폴더 내부의 파일 및 폴더 삭제
            for(File f : list){
                f.delete();//내부 파일/폴더 삭제
            }

            // 최종 목적 폴더 삭제
            if(folder.delete()) {
                System.out.println("삭제 성공");
            }
            else {
                System.out.println("삭제 실패");
            }
        }
        else {
            System.out.println("폴더 없음");
        }
    } // deleteFolder end

    private static void folderInfo() {
        String path = "testfolder";

        File folder = new File(path);

        if(folder.exists()) {
            // 폴더 내부에 저장된 파일 목록 가져오기 : listFiles()
            File[] list = folder.listFiles();

            // 파일명만 출력
            for(File f : list) {
                if(f.isFile()){
                    System.out.println(f.getName() + " <- 파일");
                }
                else {
                    System.out.println(f.getName() + " <- 폴더");
                }
            }
        }
    }

    private static void makeFolder() {
        String path = "testfolder";
        File folder = new File(path);

        if (!folder.isDirectory()) {
            if (folder.mkdir()) { // 폴더 생성 메소드 mkdir()
                System.out.println("생성 성공");
            } else {
                System.out.println("생성 실패");
            }
        } // if end
        else {
            System.out.println("폴더 존재");
        }
    } // makeFolder end
} // class end

 

'JAVA' 카테고리의 다른 글

Java_12강(파일/폴더 예제)  (0) 2022.09.29
Java_10강  (0) 2022.09.26
Java_9강  (0) 2022.09.25
Java_8강  (0) 2022.09.23
Java_7강  (0) 2022.09.22