티스토리 뷰
File 클래스 :
파일(txt, doc, mp4, jpg, png, ..) 객체와 디렉토리(폴더) 객체를 다루기 위한 클래스
File 클래스의 인스턴스 생성 : new File();
메모리(힙)에 File 클래스의 인스턴스를 생성한다는 의미
실제 하드디스크에 있는 물리적인 파일/폴더(디렉토리)를 생성하는 것은 아님
실제 파일/폴더를 만들기 위해서는 File 클래스의 메소드를 호출해야 함
파일(디렉토리)의 경로 : 절대 경로, 상대 경로
절대 경로 : 루트(C:\, D:\)부터 파일(폴더)의 위치까지 전체 이름
(예) C:\Users\sdedu\Desktop\JAVA_CODES\Java17_File\temp\test.txt
상대 경로 : 현재 작업 디렉토리를 기준으로 파일(폴더)의 위치를 표시
(예) temp\test.txt
. : 현재 디렉토리(폴더)
.. : 상위 디렉토리(폴더)
파일 구분자(file separator) - 운영체제(OS)마다 다르게 사용
MS Windows - \
Unix, Linux, Android, ... - / 사용
자바에는 File.separator 변수를 제공
public class FileMain08 {
public static final String TEST_DIR1 = "C:\\test1";
public static final String TEST_DIR2 = "test2"; //상대경로
public static final String TEST_DIR3 =
"C:" + File.separator + "Study" + File.separator + "test3";
public static void main(String[] args) {
System.out.println(TEST_DIR1);
System.out.println(TEST_DIR2);
System.out.println(TEST_DIR3);
File f = new File(TEST_DIR3); //파일, 폴더를 다루기 위한 객체
//exists() : 파일, 폴더 존재 여부 확인
if(!f.exists()) { // 파일 ,폴더가 없는 경우
System.out.println("폴더가 없습니다.");
//mkdir() : 디렉토리를 생성하는 메소드. 성공하면 true , 실패하면 false 반환 > 상위디렉토리는 있을 때 사용
//mkdirs() : 상위디렉토리를 포함하여 생성하는 메소드 > Study\test3에서 study가 없을 떄 사용
if(f.mkdirs()) {
System.out.println("폴더 생성 성공");
}else {
System.out.println("폴더 생성 실패");
}
}else { //파일, 폴더가 있는 경우
System.out.println("폴더가 이미 존재합니다.");
}
}//end main()
새로운 빈 파일을 생성
createNewFile()
import java.io.File;
import java.io.IOException;
public class FileMain09 {
public static final String DIR_NAME = "test1";
public static final String FILE_NAME = "dummy.txt";
public static final String FILE_PATH =
DIR_NAME + File.separator + FILE_NAME;
public static void main(String[] args) {
System.out.println(FILE_PATH);
File f = new File(FILE_PATH);
if(!f.exists()) {
System.out.println("파일이 없습니다.");
//createNewFile() : 새로운 빈 파일을 생성
try {
if(f.createNewFile()) {
System.out.println("파일 생성 성공");
}else {
System.out.println("파일 생성 실패");
}
} catch (IOException e) {
e.printStackTrace();
}
}else {
System.out.println("파일이 이미 존재합니다.");
}
}//end main()
파일 , 디렉토리 이름 변경 & 파일 삭제
.renameTo() & .delete()
import java.io.File;
public class FileMain10 {
public static final String TEST1 = "test1";
public static final String TEST2 = "test2";
public static final String DUMMY = "dummy.txt";
public static void main(String[] args) {
// 파일, 디렉토리 이름 변경/삭제
// test1 -> test2 디렉토리 이름 변경
File org = new File(TEST1);
File dest = new File(TEST2);
if(org.renameTo(dest)) {
System.out.println("디렉토리 이름 변경 성공");
}else {
System.out.println("디렉토리 이름 변경 실패");
}
//test2\dummy.txt 파일 삭제
String filePath = TEST2 + File.separator + DUMMY;
File file = new File(filePath);
if(file.delete()) {
System.out.println("파일 삭제 성공");
}else {
System.out.println("파일 삭제 실패");
}
}//end main()
.getProperty() :
현재 디렉토리(current working directory) 정보 확인
.getName() :
파일, 디렉토리의 이름 리턴
.getPath() : 경로를 리턴
File 객체를 생성했을 때
1) 절대 경로를 생성했으면, 절대 경로로 이름을 리턴 (절대경로 : 전체위치)
2) 상대 경로로 생성했으면, 상대 경로로 이름을 리턴 (상대경로 : 현재 위치)
.getAbsolutePath() : 절대 경로를 리턴
isDirectory() : File 객체가 디렉토리이면 true를 리턴
isFile() : File 객체가 파일이면 true를 리턴
listFiles() : 폴더(디렉토리)의 내용 확인
import java.io.File;
public class FileMain11 {
public static void main(String[] args) {
// 현재 디렉토리(current working directory)정보 확인
String cwd = System.getProperty("user.dir");
System.out.println("CWD : " + cwd);
//현재 디렉토리에 대한 File 객체
File f = new File(cwd);
//getName() : 파일, 디렉토리의 이름 리턴
System.out.println("이름 : " + f.getName());
//getPath() : 경로를 리턴
// File 객체를 생성할 때
// 1) 절대 경로를 생성했으면, 절대 경로로 이름을 리턴 (절대경로 : 전체 위치)
// 2) 상대 경로로 생성했으면, 상대 경로로 이름을 리턴 (상대경로 : 현재 위치)
System.out.println("경로 : " + f.getPath());
// getAbsolutePath() : 절대 경로를 리턴
System.out.println("절대 경로 : " + f.getAbsolutePath());
// isDirectory() : File 객체가 디렉토리이면 true를 리턴
// isFile() : File 객체가 파일이면 true를 리턴
System.out.println("디렉토리? " + f.isDirectory());
System.out.println("파일? " + f.isFile());
// listFiles() : 폴더(디렉토리)의 내용 확인
File[] list = f.listFiles();
for(File file : list) {
if(file.isDirectory()) {
System.out.print("<DIR>\t");
}else {
System.out.print("<FILE>\t");
}
System.out.print(file.getName() + "\t");
System.out.println(file.length() + "Bytes");
}
}//end main()
연락처 ver.0.3
1. TODO : data 폴더가 있는지 검사하고, 없으면 생성하는 함수
2. TODO : 데이터 파일이 존재하는지 검사하고,
없는 경우 - 새로운 데이터 파일 생성
있는 경우 - 기존 파일에서 데이터를 읽어서 ArrayList에 추가
3. TODO : 멤버 변수 list 객체를 data/contact.data 파일에 저장(쓰기)
4. TODO : data/contact.data 파일에서 ArrayList 객체를 읽어와서
멤버변수 list에 저장(읽기)
ContactImple 수정 / Main수정
ContactImple
//데이터를 저장할 폴더와 파일 이름 정의
private static final String DATA_DIR = "data";
private static final String DATA_FILE = "contact.data";
// data 폴더의 contact.data 파일을 관리할 File 객체 선언
private File dataDir;
private File dataFile;
아래는 내가 작성한 코드
데이터를 읽어서 리스트에 추가해야하는데 출력만 하고 있음
빨간 색으로 친 부분들 = 고친부분 = 좀 이상하다;
문제풀이
1. TODO : data 폴더가 있는지 검사하고, 없으면 생성하는 함수
2. TODO : 데이터 파일이 존재하는지 검사하고,
없는 경우 - 새로운 데이터 파일 생성
있는 경우 - 기존 파일에서 데이터를 읽어서 ArrayList에 추가
3. TODO : 멤버 변수 list 객체를 data/contact.data 파일에 저장(쓰기)
4. TODO : data/contact.data 파일에서 ArrayList 객체를 읽어와서
멤버변수 list에 저장(읽기)
'백엔드 교육과정 > 2월' 카테고리의 다른 글
2024.02.27_연락처 프로그램 (Ver. 0.5) , GUI09 ~14 (0) | 2024.02.27 |
---|---|
2024.02.26_GUI_Window Builder 설치 , 사용(GUI01~GUI08) (0) | 2024.02.26 |
2024.02.22_Thread, File, HW6 (0) | 2024.02.22 |
2024.02.21_Inner Class(익명 클래스(Anonymous class)), Lambda,Exception(예외처리) (0) | 2024.02.21 |
2024.02.20_List, ArrayList<E> & LinkedList<E>, Collection(Set<E>,HashSet,TreeSet),Map<K, V>, 연락처 ver.03(배열 -> 리스트) (0) | 2024.02.20 |