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