날짜와 시간(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