파일 경로는 바뀌면 안되는 경우가 많기 때문에 final(상수)로 선언.
// 1. 파일 접근하기 -> 파일 참조하기 -> 파일 참조 객체 만들기
// 2. 파일 정보 보기
// 경로
final String path="/Users/ara/class/java/file/test.txt";
// 파일 참조 객체 생성
File file=new File(path);
// System.out.println(file.exists()); // 접근할 파일이 존재하는지 확인
// System.out.println(file.getAbsolutePath()); // 파일의 경로가 제대로 잡혀있는지 확인
if (file.exists()) {
// 정보 읽기
System.out.println(file.getName());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
System.out.printf("%tF %tT\n", file.lastModified(), file.lastModified()); // 2020-11-11 09:19:24 형식으로 출력
// Calendar c=Calendar.getInstance();
// c.setTimeInMillis(file.lastModified());
// System.out.printf("%tF %tT\n", c, c); // 2020-11-11 09:19:24 형식으로 출력
System.out.println(file.canRead());
System.out.println(file.canWrite());
System.out.println(file.isHidden());
System.out.println(file.length()); // 파일크기! 바이트!
System.out.println(file.getPath()); // 참조 당시 경로
System.out.println(file.getAbsolutePath()); // 절대경로
}else {
System.out.println("파일이 존재하지 않습니다.");
}
// 파일 조작
// - 생성, 복사, 이동, 이름바꾸기, 삭제
// 1. 파일명 수정
// test.txt -> aaa.txt
String path="/Users/ara/class/java/file/test.txt";
File file=new File(path);
String path2="/Users/ara/class/java/file/aaa.txt";
File file2=new File(path2);
if (file.exists()) {
boolean result=file.renameTo(file2); // 파일의 상태 변화(성공유무가 반환값)
System.out.println(result);
}else {
System.out.println("폴더가 존재하지 않습니다.");
}
// 2. 이동
// file > aaa > hong.txt : 이동전
// file > bbb : 여기로 이동! hong.txt 파일 생기도록.
String path="/Users/ara/class/java/file/aaa/hong.txt";
File file=new File(path);
Calendar c=Calendar.getInstance();
String path2=String.format("/Users/ara/class/java/file/bbb/[%tT]hong.txt", c);
File file2=new File(path2);
if (file.exists()) {
boolean result=file.renameTo(file2); // 파일의 상태 변화(성공유무가 반환값)
System.out.println(result);
}else {
System.out.println("폴더가 존재하지 않습니다.");
}
// 3. 삭제(휴지통 거치지 않는 완전삭제!)
String path="/Users/ara/class/java/file/aaa.txt";
File file=new File(path);
if (file.exists()) {
boolean result=file.delete();
System.out.println(result?"성공":"실패");
}else {
System.out.println("폴더가 존재하지 않습니다.");
}
final String path="/Users/ara/class/java/file";
// 디렉토리 참조 객체 생성
// 디렉토리는 (크기가 없는) 파일의 일종! -> File클래스 이용. 자바는 Directory클래스는 없음.
// class File{
// public String parentDirectory="D:/test";
// }
File dir=new File(path);
if(dir.exists()) {
System.out.println(dir.getName());
System.out.println(dir.isFile());
System.out.println(dir.isDirectory());
System.out.println(dir.length()); // 파일크기! 바이트! -> 폴더가 소유하고 있는 파일들의 크기의 합
System.out.println(dir.getPath()); // 참조 당시 경로
System.out.println(dir.getAbsolutePath()); // 절대경로
}else {
System.out.println("폴더가 존재하지 않습니다.");
}
// 폴더 조작
// 생성, 이동, 폴더명 수정, 삭제
// 1. 생성
String path="/Users/ara/class/java/file/ccc"; // ccc폴더를 만들 예정.
File dir=new File(path);
if(!dir.exists()) {
dir.mkdir();
}else {
System.out.println("같은 이름의 폴더가 이미 있습니다.");
}
// 폴더 여러개 생성
path="/Users/ara/class/java/file/ddd/eee"; // ccc폴더를 만들 예정.
dir=new File(path);
if(!dir.exists()) {
dir.mkdirs();
}else {
System.out.println("같은 이름의 폴더가 이미 있습니다.");
}
// 요구사항) 회원 > 회원별 개인 폴더 생성
String[] member={"홍길동", "아무개", "하하하", "호호호"};
for(String name:member) {
path=String.format("/Users/ara/class/java/file/member/[개인폴더]%s님", name);
dir=new File(path);
dir.mkdir();
System.out.println(name+"님 개인 폴더 생성 완료.");
}
// 요구사항) 자식 폴더 생성
// /Users/ara/class/java/file/todo
// 2020-01-01 ~ 2020-12-31 -> 366개
Calendar c=Calendar.getInstance();
c.set(2020, 0, 1);
for(int i=0;i<366;i++) {
path=String.format("/Users/ara/class/java/file/todo/%tF", c);
dir=new File(path);
dir.mkdir();
System.out.printf("%tF\n", c);
c.add(Calendar.DATE, 1);
}
// 2, 3. 폴더명 수정, 이동
String path="/Users/ara/class/java/file/fff";
File dir=new File(path);
String path2="/Users/ara/class/java/file/aaa/fff"; // ccc폴더를 만들 예정.
File dir2=new File(path2);
if(dir.exists()) {
System.out.println(dir.renameTo(dir2));
}else {
System.out.println("같은 이름의 폴더가 이미 있습니다.");
}
// 4. 삭제
String path="/Users/ara/class/java/file/aaa/"; // 삭제하고자 하는 폴더 경로 끝에 / 이거 꼭 붙여줘야 함! 아님 삭제 안됨!
File dir=new File(path);
if (dir.exists()) {
System.out.println(dir.delete()); // 폴더 delete시 하위에 내용물있으면 삭제 안됨.
}else {
System.out.println("폴더가 존재하지 않습니다.");
}
월, 요일 데이터는 숫자가 아니라 배열의 개념으로 시작했기 때문.
시작 1 : 수치로써 사용되는 데이터
시작 0 : 배열, 열거형으로써 사용되는 데이터
String path="/Applications/Eclipse.app/Contents/Eclipse";
File dir=new File(path);
if (dir.exists()) {
String[] list=dir.list();
for(String name:list) {
System.out.println(name);
}
}else {
System.out.println("폴더가 존재하지 않습니다.");
}
private static void m14() {
// 이 폴더에 들어있는 모든 파일의 개수?
String path="/Applications/Eclipse.app/Contents/Eclipse"; // ccc폴더를 만들 예정.
File dir=new File(path);
// 누적변수
int count=0;
// 해당 폴더의 파일 개수 세기
if (dir.exists()) {
count+=countFile(dir, count);
}
System.out.printf("총 파일 개수 : %,d개\n", count);
}
private static int countFile(File dir, int count) {
// A. 목록 가져오기
File[] list=dir.listFiles();
// B. 파일 개수 누적
for(File file:list) {
if(file.isFile()) {
count++;
}
}
// C. 본인이 했던 행동 -> 자식 폴더 대상으로 다시 실행
for(File subdir:list) {
if (subdir.isDirectory()) {
count=countFile(subdir, count); // 재귀구조
}
}
return count;
}
System.out.println();
System.out.println(Arrays.toString(slist));
// 버블정렬
for(int i=0;i<slist.length-1;i++) {
for(int j=0; j<slist.length-1-i;j++) {
// compareTo() : 1(>), 0(=), -1(<) 셋 중 하나 반환.
if (slist[j].getName().compareTo(slist[j+1].getName())>0) { // 이름에 따라 정렬
// if (slist[j].getWeight()>slist[j+1].getWeight()) {
Student temp=slist[j];
slist[j]=slist[j+1];
slist[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(slist));