자바16일차

달달한스위츠·2024년 2월 23일

자바배우기

목록 보기
16/43

오늘의 코드
절대 경로 : 루트부터 파일의 위치까지 전체 이름
상대 경로 : 현재 작업 디렉토리를 기준으로 파일의 위치를 표시

package edu.java.file08;

import java.io.File;

// File 클래스 : 
//		파일(txt, doc, mp4, jpg, png, ..) 객체와
//		디렉토리(폴더) 객체를 다루기 위한 클래스
// File 클래스의 인스턴스 생성 : new File();
//		메모리(힙)에 File 클래스의 인스턴스를 생성한다는 의미
//		실제 하드디스크에 있는 물리적인 파일/폴더(디렉토리)를 생성하는 것은 아님
//		실제 파일/폴더를 만들기 위해서는 File 클래스의 메소드를 호출해야 함

// 파일(디렉토리)의 경로 : 절대 경로, 상대 경로
// 절대 경로 : 루트(C:\, D:\)부터 파일(폴더)의 위치까지 전체 이름
//		(예) C:\Users\sdedu\git\JavaStudy\Java17_File\temp
// 상대 경로 : 현재 작업 디렉토리를 기준으로 파일(폴더)의 위치를 표시
//		(예) 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() : 파일, 폴더가 존재하는지(true), 아닌지(false)를 리턴
		if(!f.exists()) { // 파일, 폴더가 없는 경우
			System.out.println("폴더가 없습니다.");
			// mkdir() : 디렉토리를 생성하는 메소드, 성공하면 true, 실패하면 false
			// mkdirs() : 상위디렉토리를 포함하여 생성하는 메소드.
			if(f.mkdirs()) {
				System.out.println("폴더 생성 성공");
			} else {
				System.out.println("폴더 생성 실패");
			}
		} else { // 파일, 폴더가 있는 경우
			System.out.println("폴더가 이미 존재합니다.");
		}

	} // end main()

} // end FileMain08
package edu.java.file09;

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) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			System.out.println("파일이 이미 존재합니다.");
		}
		
	} // end main()

} // end FileMain09
package edu.java.file10;

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()

} // FileMain10
package edu.java.file11;

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()

} // end FileMain10

오늘의 코드 바꾼것

package edu.java.contact04;

import java.io.*;
import java.util.*;

public class ContactDAOImple implements ContactDAO {
	// 1. private static 자기 자신 타입의 변수 선언
	private static ContactDAOImple instance = null;

	// 2. private 생성자
	private ContactDAOImple() {
		initDataDir();
		initDataFile();
	}

	// 3. public static 메소드 - 인스턴스를 리턴하는 메소드 구현
	public static ContactDAOImple getInstance() {
		if (instance == null) {

			instance = new ContactDAOImple();

		}
		return instance;
	}

	// 파일 연동을 위해 사용
	private ArrayList<ContactDTO> list = new ArrayList<>(); // 연락처 정보를 저장할 배열

	// 데이터를 저장할 폴더와 파일 이름 정의
	private static final String DATA_DIR = "data";
	private static final String DATA_FILE = "contact.data";

	// data 폴더의 contact.data 파일을 관리할 File 객체 선언
	private File dataDir; // mkdir() : 디렉토리를 생성하는 메소드, 성공하면 true, 실패하면 false
	private File dataFile;

	// TODO : data 폴더가 있는지 검사하고, 없으면 생성하는 함수
	private void initDataDir() {
		dataDir = new File(DATA_DIR);

		if (!dataDir.exists()) { // 폴더가 없으면
			System.out.println("폴더가 없습니다.");
			// mkdir() : 디렉토리를 생성하는 메소드, 성공하면 true, 실패하면 false
			// mkdirs() : 상위디렉토리를 포함하여 생성하는 메소드.
			if (dataDir.mkdirs()) {
				System.out.println("폴더 생성 성공");
			} else {
				System.out.println("폴더 생성 실패");
			}
		} else { // 파일, 폴더가 있는 경우
			System.out.println("폴더가 이미 존재합니다.");

		}
	} // end initDataDir()

	// TODO : 데이터 파일이 존재하는지 검사하고,
	// 없는 경우 - 새로운 데이터 파일 생성
	// 있는 경우 - 기존 파일에서 데이터를 읽어서 ArrayList에 추가
	private void initDataFile() {
		String filePath = DATA_DIR + File.separator + DATA_FILE;
		dataFile = new File(filePath);

		if (!dataFile.exists()) {
			System.out.println("파일이 없습니다.");

			// createNewFile() : 새로운 빈 파일을 생성
			try {
				if (dataFile.createNewFile()) {
					System.out.println("파일 생성 성공");
				} else {
					System.out.println("파일 생성 실패");
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			System.out.println("파일이 이미 존재합니다.");
			readDataFromFile();
		}
	} // end initDataFile()

	// TODO : 멤버 변수 list 객체를 data\contact.data 파일에 저장(쓰기)
	private void writeDataToFile() {
		System.out.println("ArrayList<ContactDTO> 객체를 파일에 저장하는 코드");
		OutputStream out = null;
		BufferedOutputStream bout = null;
		ObjectOutputStream oout = null;

		try {
			out = new FileOutputStream(dataFile);
			bout = new BufferedOutputStream(out);
			oout = new ObjectOutputStream(bout);

			oout.writeObject(list);

			System.out.println("데이터 저장 완료");

		} catch (Exception e) {
			e.toString();
		} finally {
			try {
				oout.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	} // end wrtieDataToFile()

	// TODO : data\contact.data 파일에서 ArrayList 객체를 읽어와서
	// 멤버 변수 list에 저장(읽기)
	private void readDataFromFile() {
		System.out.println("readDataFromFile()");
		InputStream in = null;
		BufferedInputStream bin = null;
		ObjectInputStream oin = null;

		try {
			System.out.println("try 내부");
			in = new FileInputStream(dataFile);
			bin = new BufferedInputStream(in);
			oin = new ObjectInputStream(bin);

			list = (ArrayList<ContactDTO>) oin.readObject();
			System.out.println("데이터 불러옴");
		} catch (Exception e) {
			System.out.println(e.toString());
		} finally {
			try {
				oin.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	} // end readDataFromFile()

	public int getCount() {
		return list.size();
	}

	@Override
	public int insert(ContactDTO dto) {
		System.out.println("insert()"); // 로그 찍기
		System.out.println("dto = " + dto);
		list.add(dto);
		writeDataToFile();
		return 1; // 0 : 실패, 1 : 성공
	}

	@Override
	public ArrayList<ContactDTO> select() {
		return list;
	}

	@Override
	public ContactDTO select(int index) {
		return list.get(index);
	}

	@Override
	public int update(int index, ContactDTO dto) {
		list.set(index, dto);
		writeDataToFile();
		return 1;
	}

	@Override
	public int delete(int index) {
		list.remove(index);
		return 1;
	}

}

0개의 댓글