본문 바로가기

자바(JAVA)
[자바(Java)] 파일과 디렉토리

//파일·디렉토리 조작
- 윈도우 탐색기로 하는 행동을 자바로 구현
- 파일, 폴더 > 정보 확인, 새로 만들기. 이름 바꾸기, 이동하기, 삭제하기 등..
- 디렉토리(폴더)는 파일의 일종이다. > 폴더 자체는 사이즈x

1. 외부 파일을 참조하는 객체 생성
2. 참조 객체 조작 > 외부 파일에 적용


//파일 조작

1. 파일 읽기 
2. 파일 생성
3. 파일명 수정
4. 파일 이동
5. 파일 삭제


- 파일 읽기

package com.test.file;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		
		m1();

	} //main
    
	private static void m1() {
		
		//파일
		
		//파일 경로
		String path = "C:\\OneDrive\\class\\code\\java\\file\\test.txt";
		
		//파일 참조 객체 > java.io.File 클래스
		File file = new File(path);
		
		//해당 경로에 파일이 실제로 존재하는지 확인
//		System.out.println(file.exists());
		
		if (file.exists()) {
			System.out.println("파일 있음");
			
			System.out.println(file.getName());			//파일명
			
			System.out.println(file.isFile());
			System.out.println(file.isDirectory());
			
			System.out.println(file.length()); 			//파일의 크기(byte)
			
			System.out.println(file.getAbsolutePath());	//파일 경로
			
			System.out.println(file.lastModified());	//최종 수정 시각(수정한 날짜)
			System.out.println(file.isHidden());		//숨김 여부
			System.out.println(file.getParent());
			
			//tick > Calendar
			Calendar c1 = Calendar.getInstance();
			
			System.out.println(c1.getTimeInMillis());
			
			c1.setTimeInMillis(file.lastModified());
			
			System.out.printf("%tF %tT", c1, c1);
			
		} else {
			System.out.println("파일 없음");
		}
	}
	
}

- 파일 만들기

package com.test.file;

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

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		
		m3();

	} //main

	private static void m3() {

		String path = "C:\\OneDrive\\class\\code\\java\\file\\수업.txt";
		
		File file = new File(path);
		
		try {
			System.out.println(file.createNewFile());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

- 파일 이름 바꾸기

package com.test.file;

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

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		
		m4();

	} //main

	private static void m4() {
		
		//원본
		String path = "C:\\OneDrive\\class\\code\\java\\file\\수업.txt";
		File file = new File(path);
		
		//수정 후
		String path2 = "C:\\OneDrive\\class\\code\\java\\file\\class.txt";
		File file2 = new File(path2);
		
		if(file.exists()) {
			System.out.println(file.renameTo(file2));
		} else {
			
		}		
		
	}
	
}

- 파일 이동

package com.test.file;

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

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		
		m5();

	} //main

	private static void m5() {

		// 파일 조작
		//- 파일 이동

		String path = "C:\\OneDrive\\class\\code\\java\\file\\수업.txt";
		File file = new File(path);
		

		String path2 = "C:\\OneDrive\\class\\code\\java\\move\\수업.txt";
		File file2 = new File(path2);
		
		if(file.exists()) {
			System.out.println(file.renameTo(file2));
		} else {
			
		}
		
	}
    
}

- 파일 삭제 : 휴지통에 없음 > 복구 불가능

package com.test.file;

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

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		
		m6();

	} //main

	private static void m6() {
		
		// 파일 조작
		// - 파일 삭제

		String path = "C:\\OneDrive\\class\\code\\java\\file\\test.txt";
		File file = new File(path);

		if(file.exists()) {
			System.out.println(file.delete());
		}
		
	}
}

// 폴더 조작

1. 폴더 생성
2. 폴더명 수정
3. 폴더 이동
4. 폴더 삭제


- 폴더 생성

package com.test.file;

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

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		
		m7();

	} //main

	private static void m7() {
		
		// 폴더 조작
		// - 새폴더 만들기

		String path = "C:\\OneDrive\\class\\code\\java\\aaa";
		File dir = new File(path);
		
		System.out.println(dir.mkdir());
		
		String path2 = "C:\\OneDrive\\class\\code\\java\\bbb\\ccc";
		File dir2 = new File(path2);
		 
		System.out.println(dir2.mkdirs())
    }
}

 

- 폴더명 수정 + 이동

package com.test.file;

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

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		
		m10();
		

	} //main

	private static void m10() {
		
		//폴더 조작
		// - 폴더명 수정 + 폴더 이동
		File dir1 = new File("C:\\OneDrive\\class\\code\\java\\file\\aaa");
		File dir2 = new File("C:\\OneDrive\\class\\code\\java\\file\\\\member\\fff");
		
		if(dir1.exists()) {
			System.out.println(dir1.renameTo(dir2));
		}
		
	}
}

- 폴더 삭제

package com.test.file;

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

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		m11();		

	} //main

	private static void m11() {
		
		//폴더 조작
		// - 폴더 삭제
		
		File dir1 = new File("C:\\OneDrive\\class\\code\\java\\file\\\\member\\fff");
		
		if(dir1.exists()) {
			System.out.println(dir1.delete());
		}
		
	}
}

// 파일, 디렉토리 탐색

- File.list()

- 디렉토리 안에 들어있는 리스트 파일, 폴더를 확인할 수 있음.

- IOExceoption 예외 처리 필요(throws IOException)


package com.test.file;

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

public class Ex80_File {

	public static void main(String[] args) {

		//자바 프로그램
		m12();
		

	} //main

	private static void m12() {
		
		//폴더 내용 보기
		String path = "C:\\OneDrive\\class\\dev\\eclipse";
		
		File dir = new File(path);
		
		if(dir.exists()) {
			
			File[] list = dir.listFiles();
			
			/*
			for(File file : list) {
				System.out.println(file.getName());
				System.out.println(file.isFile());
				System.out.println(file.isDirectory());
				System.out.println();
			}
			*/
			
			for(File file : list) {
				
				if(file.isDirectory()) {
					System.out.printf("[%s]\n", file.getName());
				}
				
				if(file.isFile()) {
					System.out.println(file.getName());
				}
				
			}
			
		}
		
	}
}

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class DirectoryScanRunner {

	public static void main(String[] args) throws IOException {
		Files.list(Paths.get(".")).forEach(System.out::println);
	}

}

 


// 재귀적 리스트

- Files.walk()

- 파일, 디렉토리 탐색 깊이를 설정하여 탐색할 수 있음.

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryScanRunner {
	public static void main(String[] args) throws IOException {
		Path currentDirectory = Paths.get(".");

		Files.walk(currentDirectory, 1).forEach(System.out::println);
		System.out.println();

		Files.walk(currentDirectory, 4).forEach(System.out::println);
	}
}

// 파일 골라내기

- 원하는 파일만 골라내는 방법

1.  Files.walk().filter(path -> String.valueOf(path).contains("원하는 부분")).forEach();

Predicate<? super Path> predicate = path -> String.valueOf(path).contains("원하는 부분");
Files.walk(currentDirectory, 4).filter(predicate).forEach(System.out::println);


2. 
Files.find(경로 시작점, 깊이, (path, attributes) -> String.valueOf(path).contains("원하는 부분")).forEach();

BiPredicate<Path, BasicFileAttributes> matcher = (path, attributes) -> String.valueOf(path).contains("원하는 부분");
Files.find(currentDirectory, 4, matcher).forEach(System.out::println);

- Files.walk().filter().forEach()

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryScanRunner {
	public static void main(String[] args) throws IOException {
		Path currentDirectory = Paths.get(".");

		Files.walk(currentDirectory, 4).filter(path -> String.valueOf(path).contains(".java"))
				.forEach(System.out::println);
	}
}

- Files.find().forEach()

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryScanRunner {
	public static void main(String[] args) throws IOException {
		Path currentDirectory = Paths.get(".");
		
		Files.find(currentDirectory, 4, (path, attributes) -> String.valueOf(path).contains(".java"))
				.forEach(System.out::println);
	}
}

// 현존하는 디렉토리 골라내기

-  Files.find(경로 시작점, 깊이, (path, attributes) -> attributes.isDirectory()).forEach();

BiPredicate<Path, BasicFileAttributes> directoryMatcher = (path, attributes) -> attributes.isDirectory();
Files.find(currentDirectory, 4, directoryMatcher).forEach(System.out::println);

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryScanRunner {
	public static void main(String[] args) throws IOException {
		Path currentDirectory = Paths.get(".");

		Files.find(currentDirectory, 4, (path, attributes) -> attributes.isDirectory()).forEach(System.out::println); //현존하는  디렉토리 골라내기

	}
}

// 파일 읽어오기

① stream
    - 바이트 단위 읽기(1byte씩 저장) > 한글은 추가 작업 필요

    1. 데이터를 읽어올 파일 참조
        ~ File file = new File("경로");
    2. 읽을 파일의 스트림 객체 생성(스트림 열기)
       ~ FileInputStream stream = new FileInputStream(file);
    3. 읽기 > 문자 코드값
        ~ stream.read();

    ※모든 글자 코드 읽는 법(암기!!)

int code = -1; 

while((code = stream.read()) != -1) {
	System.out.print((char)code);
}


    4. 스트림 닫기(필수는 아니지만 닫는 것을 권장)
        ~ stream.close();


② FileReader
    - 문자 단위 읽기

    1. FileReader reader = new FileReader("경로");
    2. reader.read("문자열");
    3. reader.close();

③ BufferedReader★
    - FileReader를 매개변수로 받음

    1. BufferedReader reader = new BufferedReader(new FileReader("경로"));
    2. reader.readLine("문자열");

        ※모든 내용 읽는 법

String line = null;

while((line = reader.readLine()) != null) {
	System.out.print(line);
}


    3. reader.close();

④ Files.readAllLines();
    - 리스트 형식으로 저장할 수 있음.
    - 파일 내용이 많아질 수록, 동시에 많은 내용을 저장해야 해서 많은 메모리를 사용해야 함.(좋은 방법x)


⑤ Files.lines().forEach();
    - 한 줄 한 줄 읽어올 수 있음.
    - 많은 내용을 불러올 때 효과적.
    - filter, map 사용 가능


- stream

package com.test.file;

import java.io.File;
import java.io.FileInputStream;

public class Ex81_File {

    public static void main(String[] args) {

        m2();

    } //main

    private static void m2() {
        
        File file = new File("C:\\OneDrive\\class\\code\\java\\file\\data.txt");
        
        try {
            
            if(file.exists()) {
                
                FileInputStream stream = new FileInputStream(file);
                
                int code = -1;
                
                while((code = stream.read()) != -1) {
                    System.out.print((char)code);
                }
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

- FileReader

package com.test.file;

import java.io.File;
import java.io.FileReader;

public class Ex81_File {

	public static void main(String[] args) {

		m5();		

	} //main

	private static void m5() {
		
		try {
			
			FileReader reader = new FileReader("C:\\OneDrive\\class\\code\\java\\file\\0227.txt");
			
			int code = -1;
            while((code = reader.read()) != -1) {
                System.out.print((char)code);
            }
  
  			reader.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}		
		
	}
}

- BufferedReader

package com.test.file;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class Ex81_File {

	public static void main(String[] args) {

		m8();		

	} //main

	private static void m8() {
		
		try {
			
			BufferedReader reader = new BufferedReader(new FileReader("C:\\OneDrive\\class\\code\\java\\file\\data4.txt"));
						
			String line = null;
			
            while((line = reader.readLine()) != null) {
                System.out.println(line);
            }
			
			reader.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

-  Files.readAllLines()

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class FileReadRunner {
	public static void main(String[] args) throws IOException {

		Path pathFileToRead = Paths.get("./resources/data.txt");

		List<String> lines = Files.readAllLines(pathFileToRead);
		System.out.println(lines);
        
	}
}

- Files.lines().forEach()

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileReadRunner {
	public static void main(String[] args) throws IOException {

		Path pathFileToRead = Paths.get("./resources/data.txt");

		Files.lines(pathFileToRead).forEach(System.out::println);
	}
}

- filter, map 사용

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileReadRunner {
	public static void main(String[] args) throws IOException {

		Path pathFileToRead = Paths.get("./resources/data.txt");

		Files.lines(pathFileToRead).filter(str -> str.contains("s")).forEach(System.out::println);
		System.out.println();
		
		Files.lines(pathFileToRead).map(String::toUpperCase).forEach(System.out::println);
			
	}
}

// 파일 쓰기

① stream
    - 바이트 단위 쓰기(1byte씩 저장) > 한글은 추가 작업 필요

    1. 데이터를 저장할 파일 참조
    2. 저장할 파일의 스트림 객체 생성(스트림 열기)
    3. 쓰기 > 문자코드값
    4. 스트림 닫기

    a. 덮어쓰기 모드(기본) 
        - 기존 내용을 삭제하고 다시 파일을 생성 후 데이터를 작성한다.
        - 파일 있으면 > 파일을 다시 생성
        - 파일 없으면 > 파일을 새로 생성

    b. 이어쓰기 모드
        - 기존 내용을 유지하고, 이어서 데이터를 추가한다.
        - 스트림을 열 때 매개변수에 true를 추가로 적어준다.
        - 파일 있으면 > 파일을 그대로 사용
        - 파일 없으면 > 파일을 새로 생성

② FileWriter
    - 문자 단위 쓰기(2byte씩 저장)

    1. FileWriter writer = new FileWriter("경로");
    2. writer.write("문자열");
    3. writer.close();

③ BufferedWriter★
    - FileWriter를 매개변수로 받음

    1. BufferedWriter writer = new BufferedWriter(new FileWriter("경로"));
    2. writer.write("문자열");
        ※ writer.newLine(); : 개행
    3. writer.close();


- stream

package com.test.file;

import java.io.File;
import java.io.FileOutputStream;

public class Ex81_File {

    public static void main(String[] args) {

		m1();

	} //main

	private static void m1() {
		
		//파일 쓰기(출력)
		// - 쓰기 스트림 객체
		
		try {

			//데이터를 저장할 파일을 참조
			File file = new File("C:\\OneDrive\\class\\code\\java\\file\\data2.txt");
			
			//저장할 파일의 스트림 객체 생성(스트림 열기)
			FileOutputStream stream = new FileOutputStream(file, true); // true를 붙이면 이어쓰기 모드
			
			//쓰기 > 문자코드값
//			stream.write(68);
//			stream.write(69);
//			stream.write(70);
			
//			stream.write('\r');
//			stream.write('\n');
//
//			stream.write('J');
//			stream.write('a');
//			stream.write('v');
//			stream.write('a');

//			stream.write('\r');
//			stream.write('\n');
//
//			String txt = "Hello Java!!";
//
//			for(int i = 0; i < txt.length(); i++) {
//
//				char c = txt.charAt(i);
//				stream.write(c);
//
//			}

//			stream.write('\n');
			
//			byte[] list = { 'A', 'B', 'C' };
//			stream.write(list);
			
			stream.write('\n');
			
			String txt = "Java Programming";
			
			stream.write(txt.getBytes());
			
			
			//스트림 닫기
			stream.close();
			
			System.out.println("완료");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

- FileWriter

package com.test.file;

import java.io.File;
import java.io.FileWriter;

public class Ex81_File {

    public static void main(String[] args) {

        m3();

    } //main

    private static void m3() {
				
        try {
            FileWriter writer = new FileWriter("C:\\OneDrive\\class\\code\\java\\file\\data3.txt");
    				
            writer.write("ABC");
             writer.write("홍길동");
    				
            writer.close();
    				
            System.out.println("완료");
    				
            } catch (Exception e) {
                e.printStackTrace();
            }
    		
	}
}

- FileWriter로 메모장 만들기

package com.test.file;

import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;

public class Ex81_File {

    public static void main(String[] args) {

        m4();		

	} //main

	private static void m4() {
		
		//메모장 콘솔 버전 > 쓰기
		try {
			
            Scanner scan = new Scanner(System.in);
			
			System.out.print("저장할 파일명: ");
			String fileName = scan.nextLine();
			
			//프로그램 사용자 환경
			//1. CLI > Command Line Interface > 콘솔창
			//2. GUI > Graphic User Interface > 현재 대부분 프로그램

			FileWriter writer = new FileWriter("C:\\OneDrive\\class\\code\\java\\file\\" + fileName + ".txt");
				
			while(true) {
				
				System.out.print("입력: ");
				String line = scan.nextLine();
				
				if(line.equals("exit")) { //그만두기
					break;
				}
				
				writer.write(line); //한 줄 입력 > 텍스트 파일 한 줄 쓰기
				writer.write("\r\n");
							
			}
			
			scan.close();
			writer.close();
			
			System.out.println("쓰기 종료");
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

- BufferedWriter

package com.test.file;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class Ex81_File {

	public static void main(String[] args) {

		m7();		

	} //main

	private static void m7() {
		
		try {
			
			BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\OneDrive\\class\\code\\java\\file\\data4.txt"));
			
			writer.write("안녕하세요.");
			writer.write("\r\n");
			writer.write("홍길동입니다.");
			writer.newLine(); // \r\n
			writer.write("반갑습니다.");
			
			writer.close();
			
			System.out.println("완료");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

- Files.write()

package files;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;

public class FileWriteRunner {
	public static void main(String[] args) throws IOException {
		Path pathFileToWrite = Paths.get("./resources/file-write.txt");

		List<String> list = Arrays.asList("strawberry", "grape", "orange", "pear", "melon", "apple");

		Files.write(pathFileToWrite, list);

	}
}

 

'자바(JAVA)' 카테고리의 다른 글

[자바(Java)] DateTime  (0) 2023.02.06
[자바(Java)] 에러(Error)  (0) 2023.02.03
☆이클립스 개인 설정  (0) 2023.01.14
[자바(Java)] BigInteger , BigDecimal  (0) 2023.01.06
[자바(Java)] 10진수 <-> 2진수 변환  (0) 2023.01.02