특정 날짜로 Calendar 지정
set(상수, 변경시간값) : 위의 상수에 따라 해당 날짜 및 시간 값을 변경할 수 있음
달의 시작일과 마지막일을 구하는 메소드
getActualMinimum(Calendar, DATE); - 시작일
getActualMaximum(Calendar, DATE); - 마지막일
// 요일출력
int dow = cal.get(Calendar.DAY_OF_WEEK);
System.out.println(dow);
// 현재 '일'을 포함한 달의 마지막 날 - 이번달의 마지막 날
int lastDay = cal.getActualMaximum(Calendar.DATE);
// 현재 '일'을 포함한 달의 첫번째 날
int startDay = cal.getActualMinimum(Calendar.DATE);
System.out.println(startDay + ", " + lastDay);
// Calendar의 날짜 지정
// set(상수, 값)
// 연, 월, 일 지정
cal.set(Calendar.YEAR, 2020);
cal.set(Calendar.MONTH, 1); // 실제 월 -1
cal.set(Calendar.DATE,1);
year = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH) + 1;
date = cal.get(5);
System.out.printf("%d-%02d-%02d\n", year, month, date);
dow = cal.get(Calendar.DAY_OF_WEEK);
System.out.println(dow);
lastDay = cal.getActualMaximum(Calendar.DATE);
System.out.println(lastDay);
File처리
프로그램에서 발생된 데이터를 유지하는 방법
1) 파일을 활용
2) 데이터베이스를 활용(*)
파일이란 보조기억장치(하드디스크, USB 등)에 저장된 상태의 데이터 묶음
-> 파일을 활용하려면 메모리에 적재되어야 한다.
메모리에 적재하여 사용하는 클래스 - File class
File class
파일과 폴더(디렉토리, Directory)를 다루는 데 사용하는 클래스
폴더란? 파일아나 서브폴더의 정보를 저장하고 있는 파일
파일작업
1) 파일 생성 : 파일 객체(인스턴스) 생성
특정 폴더에 파일 생성할 경우 : "폴더명\\파일명.확장자"
2) 파일 정보 확인
3) 파일 경로 확인
4) 파일 삭제
5) 파일 이름/경로 변경
6) 폴더 생성
7) 폴더 정보 확인 - 폴더 내용 보기(파일, 서브폴더)
8) 폴더 변경
9) 폴더 삭제 - 반드시 하위 폴더와 파일을 삭제한 후 처리해야 한다.(하위 폴더 안의 내용도 삭제해야 지워진다.)
File Input / Output(입출력) : 프로그램 기준
input : 파일에서 데이터를 가져오는 작업
output : 파일에서 데이터를 저장하는 작업
입출력이란 데이터의 연속된 흐름을 처리하는 것
-> Stream
스트림은 단반향
입력용 스트림과 출력용 스트림을 따로 사용
필요 클래스
1. File 클래스
2. 파일 입출력용 스트림 클래스
FileInputStream / FileOutputStream : byte 단위
FileReader / FileWriter : 문자 단위
3. 입출력용 보조 스트림 클래스
BufferedReader / BufferedWriter : 문장/ 한 줄 단위
package fileinout;
import java.io.*;
import java.util.Scanner;
public class FileOutput {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) throws IOException {
// 예제용 폴더 생성
String path = "data";
File folder = new File("data");
if (!folder.isDirectory()) {
boolean b = folder.mkdir();
}
// FileoutputStream 사용 메소드
outputStreamUse(path);
}
private static void outputStreamUse(String path) throws IOException {
FileOutputStream fos = null;
System.out.print("파일명 : ");
String fname = sc.nextLine();
fname += ".txt";
File file = new File(path + "\\" + fname);
try {
// true가 없으면 덮어쓰기 모드, 파일명이 동일한 경우 나중에 입력된 내용으로 덮어쓰기 됨
fos = new FileOutputStream(file, true);
// file 뒤에 true를 넣으면 붙여 쓰기(oppend) 모드로 파일을 열어줌.
//String str = "안녕하세요!\n";
System.out.println("<저장 내용>");
String str = sc.nextLine();
str += "\n"; // 줄바꿈
// 문자열 -> byte 배열로 변환
byte b[] = str.getBytes();
fos.write(b);
System.out.println("저장완료");
} catch (FileNotFoundException fe) {
fe.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
} finally {
// FileOutputStream은 가비지 처리가 안 된다.
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
try문 전에 선언, try문에서 열어주고, finally 문에서 닫아주어야 한다.
package fileinout;
import java.io.*;
import java.util.Scanner;
public class FileOutput {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) throws IOException {
// 예제용 폴더 생성
String path = "data";
File folder = new File("data");
if (!folder.isDirectory()) {
boolean b = folder.mkdir();
}
// FileoutputStream 사용 메소드
// outputStreamUse(path);
// FirWriter 사용 메소드
writeUse(path);
}
private static void writeUse(String path) {
FileWriter fw = null;
System.out.print("파일명 : ");
String fname = sc.nextLine();
fname += ".txt";
File file = new File(path + "\\" + fname);
try {
fw = new FileWriter(file);
System.out.println("<저장 내용>");
String str = sc.nextLine();
str += "\n"; // 줄바꿈
fw.write(str);
System.out.println("저장 완료");
} catch (IOException e){
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package fileinout;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInput {
public static void main(String[] args) {
String path = "data";
//FileIuputStrea 사용 메소드
inputStreamUse(path);
}
private static void inputStreamUse(String path) {
FileInputStream fis = null;
String fname = path + "\\" + "test1.txt";
File file = new File(fname);
try {
fis = new FileInputStream(file);
int i = 0; // 파일에서 읽어온 데이터를 저장하는 변수
// 반복적으로 read() 메소드를 사용
// read() : byte 단위로 읽어오는 메소드, 읽어올 내용이 없으면 -1을 return
while ((i = fis.read()) != -1){
System.out.write(i);
//byte를 출력하는 메소드 write(byte)
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
}
package fileinout;
import javax.print.DocFlavor;
import java.io.*;
public class FileInput {
public static void main(String[] args) {
String path = "data";
//FileIuputStrea 사용 메소드
// inputStreamUse(path);
// FileReader 사용 메소드
readerUse(path);
}
private static void readerUse(String path) {
FileReader fr = null;
String fname = path + "\\" + "test1.txt";
File file = new File(fname);
try {
fr = new FileReader(file);
int i = 0;
while ((i = fr.read()) != -1) {
System.out.print((char) i);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
'공부기록' 카테고리의 다른 글
4월 27일 Java - Lombok, JDBC 2 (0) | 2023.04.27 |
---|---|
4월 27일 Java - JDBC (0) | 2023.04.27 |
4월 24일 Java - StringBuffer, 날짜, 시간처리 (1) | 2023.04.24 |
4월 24일 Java - Collection Framework, Iterator, 기타 객체들 (0) | 2023.04.24 |
4월 21일 Java - 예외 처리2, 컬렉션 프레임워크 (0) | 2023.04.21 |