파일 정보
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Ex001_File {
public static void main(String[] args) {
String appDir = System.getProperty("user.dir");
// System.out.println("현 작업경로 : " + appDir);
String pathname = appDir + File.separator + "user.txt";
// File.separator : 윈도우즈는 \, Mac이나 리눅스는 /
// System.out.println(pathname);
File f = new File(pathname);
// exists() : 폴더 또는 파일이 존재하면 true, 없으면 false를 반환
if (!f.exists()) {
System.out.println(pathname + " 파일은 존재하지 않습니다.");
System.exit(0);
}
try {
System.out.println("파일정보...");
System.out.println("파일명 : " + f.getName()); // 파일명.확장자
System.out.println("경로명 : " + f.getPath()); // c:\폴더\파일명.확장자
System.out.println("절대경로명 : " + f.getAbsolutePath()); // c:\폴더\파일명.확장자
System.out.println("표준경로명 : " + f.getCanonicalPath()); // c:\폴더\파일명.확장자
System.out.println("부모경로 : "+f.getParent()); // c:\폴더
System.out.println("파일길이(long형, 단위:byte) : " + f.length());
// f.lastModified() : 1970.1.1부터 파일생성일까지를 ms단위로 환상하여 반환
System.out.println("파일 생성일자 : " + new Date(f.lastModified()));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String s = sdf.format(new Date(f.lastModified()));
System.out.println("파일생성일 : " + s);
System.out.println("읽기 속성 : "+f.canRead());
System.out.println("쓰기 속성 : "+f.canWrite());
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.getProperty("user.dir");으로 현재 작업경로를 알 수 있다.
File.separator : Windows는 \, Mac이나 Linux / 을 나타낸다.
f.exists() : 폴더 또는 파일이 존재하면 true, 없으면 false를 반환
System.exit(0) : 프로그램 종료
File클래스를 통해 파일명, 경로, 절대경로, 표준경로, 파일길이, 생성일자 ... 등을 알 수 있다.
파일 삭제 (1) - 한 개만 삭제
import java.io.File;
public class Ex002_FileDelete {
public static void main(String[] args) {
String appDir = System.getProperty("user.dir"); // 현재 작업 경로
String pathname = appDir + File.separator + "test.txt";
File f = new File(pathname);
if (!f.exists()) {
System.out.println(pathname + "파일이 존재하지 않습니다.");
System.exit(0);
}
boolean b = f.delete();
// 파일 또는 디렉토리 삭제
// 한번에 하나의 파일 또는 디렉토리만 삭제 가능
// 디렉토리는 비어 있어야 삭제가 가능
if (b) {
System.out.println("파일이 삭제 되었습니다.");
} else {
System.out.println("파일 삭제가 실패 했습니다.");
}
}
}
f.delete(); 메소드
- 파일 또는 디렉토리를 삭제한다.
- 한번에 하나의 파일 또는 디렉토리만 삭제가 가능하다.
- 디렉토리는 비어 있어야 삭제가 가능하다.
파일 삭제(2) - 해당 경로에 있는 모든 파일 삭제
import java.io.File;
public class Ex007_FileRemove {
public static void main(String[] args) {
String pathname = "C:"+File.separator + "ex";
FileManager fm = new FileManager();
fm.removeDir(pathname);
System.out.println("디렉토리 또는 파일 삭제 완료...");
}
}
class FileManager {
/**
* 파일 또는 폴더 삭제 (하위 폴더 및 모든 파일도 제거 되므로 조심해라...)
* @param pathname 삭제할 폴더 또는 파일
* @return 폴더 또는 파일 삭제 여부
*/
public boolean removeDir(String pathname) {
boolean b = false;
try {
File f = new File(pathname);
if(f.isDirectory()) { // 폴더이면 속으로 들어가라
removeSubDir(pathname);
}
b = f.delete(); // 폴더가 아니면 삭제
} catch (Exception e) {
e.printStackTrace();
}
return b;
}
private void removeSubDir(String pathname) {
File[] ff = new File(pathname).listFiles();
try {
if(ff.length == 0) // 자식이 없는 경우
return;
for(File f : ff) {
if(f.isDirectory()) { // 폴더면 또 안으로 들어가기
removeSubDir(f.getPath()); // 재귀 호출
}
f.delete();
}
} catch (Exception e) {
}
}
}
f.delete() 폴더가 아니면 삭제하고 자식이 없는 디렉토리일시에도 삭제한다.
디렉토리 일시 안으로 들어가서 파일들을 하나씩 다 삭제하는데, 다시 또 디렉토리면 재귀 호출을 통해 해당 경로에 있는 디렉토리 안으로 들어가서 또 파일을 하나씩 다 삭제한다.
파일 리스트
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Ex004_FileList {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
try {
System.out.print("경로 ? ");
s = br.readLine();
dirList(s);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void dirList(String pathname) {
// 폴더에 존재하는 폴더 또는 파일 리스트 확인하기
File file = new File(pathname);
if ( ! file.exists()) {
System.out.println("디렉토리가 존재하지 않습니다.");
return;
}
if(! file.isDirectory()) {
System.out.println("디렉토리가 아닙니다.");
return;
}
File [] ff = file.listFiles();
// 폴더에 존재하는 모든 폴더 또는 파일에 대한 File 객체를 반환
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String s;
for(File f : ff) {
s = sdf.format(new Date(f.lastModified()));
if(f.isFile()) {
System.out.print(f.getName()+"\t");
System.out.print(s+"\t");
System.out.println(f.length()+"bytes");
} else if(file.isDirectory()) {
System.out.println("["+f.getName()+"]...");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
file.exists() 입력한 경로에 파일/디렉토리가 존재하지 않으면 false를 반환한다.
file.isDirectory() 입력한 경로가 디렉토리면 true, 아니면 false를 반환한다.
file.listFiles() 입력한 경로에 존재하는 모든 파일, 디렉토리를 파일 배열로 반환한다.
파일은 파일명, 생성날짜, 파일길이를 출력하고
디렉토리는 [ ] 대괄호로 출력한다.
파일 만들기
import java.io.File;
public class Ex005_FileMakeDir {
public static void main(String[] args) {
String pathname = "c:"+File.separator+"ex"+File.separator+"test";
try {
File f = new File(pathname);
if(! f.exists()) {
f.mkdirs(); // 상위 폴더가 존재하지 않으면 상위 폴더도 생성함
// f.mkdir(); // 상위 폴더가 존재하지 않으면 폴더를 생성하지 않음
System.out.println("디렉토리를 생성했습니다.");
} else {
System.out.println("존재하는 디렉토리입니다.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
f.mkdirs() 상위 폴더가 존재하지 않으면 상위 폴더도 생성한다. 즉 ex가 없으면 ex도 만들고 test도 만든다.
f.mkdir() 상위 폴더가 존재하지 않으면 폴더를 생성하지 않음. 즉, ex가 없으면 test가 만들어지지 않는다.
파일 이름 변경하기
import java.io.File;
import java.util.Calendar;
public class Ex006_FileRename {
public static void main(String[] args) {
String appDir = System.getProperty("user.dir");
String pathname = appDir + File.separator + "ex.txt";
File f = new File(pathname);
if(! f.exists()) {
System.out.println(pathname+" - 존재하지 않음...");
System.exit(0);
}
// 확장자(.txt)
String fileExt = pathname.substring(pathname.lastIndexOf("."));
Calendar cal = Calendar.getInstance(); // 현재 시스템의 날짜/시간을 가지고 있음
String newName = String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$ts", cal);
// 1$ 는 첫번째 변수,
newName +=System.nanoTime() + fileExt;
// System.out.println(newName);
try {
String newFilename = appDir + File.separator + newName ;
File dest = new File(newFilename);
// 파일 또는 디렉토리 이름 변경
f.renameTo(dest);
System.out.println("파일 이름 변경 완료...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
f.renameto(File dest); 파일 또는 디렉토리 이름을 변경해준다.
확장자가 변경되면 안되므로 substring을 통해 마지막 . 뒤에는 따로 저장해 놓는다.
그리고 주고 싶은 이름을 설정하고 확장자를 다시 붙이면 된다.
'쌍용강북교육센터 > 8월' 카테고리의 다른 글
0824_Java : Encoding 인코딩 (0) | 2021.08.25 |
---|---|
0824_Java : CAT 파일의 내용을 읽어 화면에 출력 (0) | 2021.08.25 |
0823_Java : FileOutputStream 클래스 (0) | 2021.08.24 |
0823_Java : FileWriter, FileReader 클래스 (0) | 2021.08.24 |
0823_Java : FileCopy 파일 복사하기 (0) | 2021.08.24 |