스트림 들어가기전 기본중의 기본 file에 대해서 알아봅시다
책 51쪽
File file = new File("d:/D_Other/test.txt");
// 실제 디스크에 test.txt가 생성되는 것은 아니지만
// 이 파일을 다루기 위해 이 경로를 참조하는 파일 객체를 만듬
System.out.println("파일명 : " + file.getName());
// text.txt
System.out.println("파일 여부 : " + file.isFile());
// false: 해당 경로에 실제 존재하는 파일의 여부를 알려주나, 아직 이 파일이 없기때문에 false리턴
File file2 = new File("d:/D_Other");
System.out.print(file2.getName() + "은 ");
if(file2.isFile()) {
System.out.print("파일");
} else if(file2.isDirectory()){
System.out.print("디렉토리(폴더)");
}
// 출력: D_Other은 디렉토리(폴더)
File file3 = new File(file2, "test.txt"); // file2 = d:/D_Other
System.out.println(file3.getName() + "의 용량 크기 : " + file3.length() + "bytes");
// 출력: test.txt의 용량 크기 : 53bytes
File file4 = new File("d:/D_Other", "text.txt");
file4.getAbsolutePath();
// 절대 경로 : d:\D_Other\test.txt
file4.getPath();
// 경로 : d:\D_Other\test.txt (생성자에 입력한 경로)
file4.getCanonicalPath(); // IOException 던짐
// 표준 경로 : D:\D_Other\test.txt
T01_FileTest.class.getResource("T01_FileTest.class");
// 현재 클래스의 URL :
// file:/D:/A_TeachingMaterial/3.HighJava/workspace/
// JavaIOTest/bin/kr/or/ddit/basic/T01_FileTest.class
// 스키마: file: 부분
T01_FileTest.class.getResource("T01_FileTest.class").getPath()
// 스키마를 제외한 현재 클래스의 URL :
// /D:/A_TeachingMaterial/3.HighJava/workspace/
// JavaIOTest/bin/kr/or/ddit/basic/T01_FileTest.class
File file5 = new File("d:/D_Other/연습용");
// d:/D_Other 폴더가 미리 있어야 생성 가능
// 없다면 중간 경로도 생성해주는 mkdirs()를 이용해서 만들어야 함
if(file5.mkdir()) { // 생성결과에 따라 t/f반환
System.out.println(file5.getName() + " 만들기 성공! >ㅁ<" );
}else {
System.out.println(file5.getName() + " 만들기 실패!!! ㅠㅅㅠ");
}
// 중간 경로 없이 잘 만들어졌음~!
File file6 = new File("d:/D_Other/test/java/src");
if(file6.mkdirs()) {
System.out.println(file6.getName() + " 만들기 성공! >ㅁ<" );
}else {
System.out.println(file6.getName() + " 만들기 실패!!! ㅠㅅㅠ");
}
File f1 = new File("d:/D_Other/sample.txt");
File f2 = new File("d:/D_Other/test.txt");
if(f1.exists()) { // 접근하고자 하는 경로에 그 파일이 존재한다면 true
System.out.println(f1.getAbsolutePath() + "은 존재합니다.");
}else {
System.out.println(f1.getAbsolutePath() + "은 없는 파일입니다.");
try {
if(f1.createNewFile()) {
System.out.println(f1.getAbsolutePath() + "파일을 새로 만들었습니다."); // 파일만 만드는 것임. 컨텐츠는 스트림객체로 채움.
}
} catch (IOException e) {
e.printStackTrace();
}
}
// listFiles() 예시
File f3 = new File("d:/D_Other") // File객체 생성 (파일, 디렉토리 모두 가능)
File[] files = f3.listfiles(); // f3에 들어있는 것을 listFiles를 통해 File배열에 담음
// f3(디렉토리)에 담긴 file객체들 꺼내 출력
for (File file : files) {
System.out.print(files.getName() + " => ");
if(file.isFile()){
System.out.println("파일");
}else if (file.isDirectory()){
System.out.println("디렉토리");
}
}
// list() 예시
String[] strFiles = f3.list();
for (String file : strFiles) {
System.out.println(file);
}
// String으로 반환된 값을 담은 배열.
// isFile()이나 isDirectory()이용 불가
private static void displayFileList(File dir) {
System.out.println("[" + dir.getAbsolutePath() + "] 디렉토리의 내용");
// 디렉토리 안의 모든 파일 및 디렉토리 목록을 가져온다.
File[] files = dir.listFiles();
// 하위 디렉토리 정보를 저장한 ArrayList 생성
// -> File 배열의 인덱스 저장
List<Integer> subDirList = new ArrayList<Integer>();
// 날짜를 출력하기 위한 형식 설정
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a hh:mm");
}
for (int i = 0; i < files.length; i++) {
String attr = ""; // 파일의 속성(R, W, H, 디렉토리 구분)
String size = ""; // 파일의 크기
if (files[i].isDirectory()) {
attr = "<DIR>";
subDirList.add(i); // 인덱스를 List에 추가
// File[]의 i번째 있는 디렉토리들을 추후에 출력하기 위해서
} else {
size = files[i].length() + ""; // 사이즈값 문자열화
attr = files[i].canRead() ? "R" : " ";
attr = files[i].canWrite() ? "W" : " ";
attr = files[i].isHidden() ? "H" : " ";
}
System.out.printf("%s %5s %12s %s\n" // 포맷스트링: 출력 예쁘게
, sdf.format(new Date(files[i].lastModified())) // %s
, attr // %5s: 문자열 사이즈를 5글자로 고정(양수: 오른쪽 정렬)
, size // %12s
, files[i].getName()); //%s\n, 파일명 출력
}
int dirCount = subDirList.size(); // 폴더 안의 하위폴더 개수
int fileCount = files.length - dirCount; // 폴더 안의 파일 개수
System.out.println(fileCount + "개의 파일, " + dirCount + "개의 디렉토리");
System.out.println();
for (int i = 0; i < subDirList.size(); i++) {
// 하위폴더의 내용도 출력하기 위해 현재 메서드를 재귀 호출
displayFileList(files[subDirList.get(i)]);
}
}