분류 전체보기

java.io.File 클래스

디스크에 있는 파일이나 디렉터리의 경로를 관리하는 클래스입니다. File 클래스는 파일이나 디렉터리 경로를 추상화하여 파일의 크기나 디렉터리내의 자식 디렉터리 정보 등을 알 수 있습니다. 그 밖에 파일의 생성과 삭제, 파일의 최종 수정 날짜를 변경하는 등의 기능도 제공합니다.

File 클래스의 생성자와 메서드

File 클래스의 주요 생성자
생성자 설명
File(File parent, String child) File 객체 부모 경로명과 문자열인 자식 경로명으로부터 새로운 File 인스턴스를 생성한다.
File(String pathname) 지정된 경로 문자열을 이용하여 새로운 File 인스턴스를 생성한다.
File(String parent, String child) 부모 경로 문자열과 자식 경로 문자열을 사용하여 File 인스턴스를 생성한다.
File(URI uri) 지정된 URI를 사용하여 File 인스턴스를 생성한다.

 

File 클래스의 주요 메서드
리턴 타입 메서드 설명
boolean canExecute() 대상 경로의 파일이 실행 가능한 파일이면 true, 아니면 false 값을 리턴한다.
boolean canRead() 대상 경로의 파일이 읽기 가능한 파일이면 true, 아니면 false 값을 리턴한다.
boolean canWrite() 대상 경로의 파일이 쓰기 가능한 파일이면 true, 아니면 false 값을 리턴한다.
boolean createNewFile() 대상 경로의 빈(empty) 파일을 생성한다. 성공하면 true, 아니면 false 값을 리턴한다.
boolean delete() 대상 경로의 파일 삭제에 성공하면 true, 아니면 false 값을 리턴한다.
boolean exists() 대상 경로의 파일이 존재하면 true, 아니면 false 값을 리턴한다.
String getAbsolutePath() 대상 경로의 절대 경로명을 리턴한다.
String getCanonicalPath() 대상 경로의 정규 경로명을 리턴한다.
String getName() 대상 경로의 파일명이나 디렉터리명을 리턴한다.
boolean isDirectory() 대상 경로가 디렉터리이면 true, 아니면 false 값을 리턴한다.
boolean isFile() 대상 경로가 파일이면 true, 아니면 false 값을 리턴한다.
String[] list() 대상 경로의 모든 파일과 디렉터리를 문자열 배열로 리턴한다.
boolean mkdir() 대상 경로 상의 디렉터리를 만들면 true, 아니면 false 값을 리턴한다.
boolean renameTo(File dest) 지정된 파일명으로 변경한다.
long lastModified() 지정된 파일의 최종 변경 시간을 밀리초로 리턴한다.
long length() 지정된 파일의 크기를 리턴한다.

File 클래스를 사용한 예

package net.jeonsam.examples;

import java.io.*;

class FileInfo {
	/**
	 * @param args
	 */
	public static void main(String[] args) throws IOException {
		String filePath = "C:\\";
		File f1 = new File(filePath);
		String list[] = f1.list();
		for (int i = 0; i < list.length; i++) {
			File f2 = new File(filePath, list[i]);
			if (f2.isDirectory()) {
				System.out.println(list[i] + " : 디렉터리");
			} else {
				System.out.println(list[i] + " : 파일(" + f2.length() + ")bytes");
			}
		}
		File f3 = new File("C:\\test.txt");
		System.out.println(f3.createNewFile());
		System.out.println(f3.getAbsolutePath());
		System.out.println(f3.getCanonicalPath());
		System.out.println(f3.getPath());
		System.out.println(f3.getName());
		System.out.println(f3.getParent());
		File f4 = new File("C:\\test.txt");
		File f5 = new File("C:\\test1.txt");
		System.out.println(f4.renameTo(f5));
	}

}

File 객체로 할 수 있는 작업들

① 기존 파일을 나타내는 File 인스턴스를 생성한다.

File f = new File("MyFile.txt");

② 새로운 디렉터리를 생성한다.

File dir = new File("MyDirectory");
dir.mkdir();

③ 디렉터리의 내용을 출력한다.

if (dir.isDirectory()) {
    String[] dirContents = dir.list();
    for (int i = 0; i < dirContents.length; i++) {
        System.out.println(dirContents[i]);
    }
}

④ 파일이나 디렉터리의 절대 경로명을 출력한다.

System.out.println(dir.getAbsolutePath());

⑤ 파일이나 디렉터리를 삭제한다.

boolean isDeleted = f.delete();

텍스트 파일 읽기

BufferedReader reader = new BufferedReader(new FileReader(new File());

버퍼를 이용하여 텍스트 파일의 내용을 한 행씩 읽어들이는 예입니다. BufferedReader만 close 시키면 다른 스트림도 자동으로 close 됩니다.

package net.jeonsam.examples;

import java.io.*;

class ReadTextFile {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			File myFile = new File("C:\\MyText.txt");
			FileReader fileReader = new FileReader(myFile);
			
			BufferedReader reader = new BufferedReader(fileReader);
			
			String line = null;
			
			while ((line = reader.readLine()) != null) {
				System.out.println(line);
			}
			reader.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		} 
	}

}

split()을 이용하여 파싱하기

String str = "Thinking in Java/중급서"
String[] res = str.split("/");
for (String t : res) {
    System.out.println(t);
}

텍스트 파일 쓰기

BufferedWriter writer = new BufferedWriter(new FileWriter(new File());

연습문제.

이름/전화번호 형식으로 저장된 텍스트 파일을 읽어서 이름에 해당하는 전화번호 찾기

package net.jeongsam.petshop;

import java.util.ArrayList;
import java.util.Random;

class CountTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int maleTeachers = 0;
		int femaleTeachers = 0;
		int maleStudents = 0;
		int femaleStudents = 0;
		
		Student s = null;
		Teacher t = null;
		ArrayList persons = new ArrayList();
		
		for (int i = 0; i < 500; i++) {
			switch (new Random().nextInt(5)) {
			case 0:
			case 1:
			case 2:
			case 3:
				s = new Student();
				s.setGender((new Random().nextInt(2) == 0) ? 'M' : 'F');
				persons.add(s);
				break;
			default:
				t = new Teacher();
				t.setGender((new Random().nextInt(2) == 0) ? 'M' : 'F');
				persons.add(t);
				break;
			}
		}
		
		for (Person p : persons) {
			if (p instanceof Teacher && p.getGender() == 'M') {
				maleTeachers++;
			} else if (p instanceof Teacher && p.getGender() == 'F') {
				femaleTeachers++;
			} else if (p instanceof Student && p.getGender() == 'M') {
				maleStudents++;
			} else {
				femaleStudents++;
			}
		}
		
		System.out.println("남자 강사의 수 : " + maleTeachers + "명");
		System.out.println("여자 강사의 수 : " + femaleTeachers + "명");
		System.out.println("남자 수강생의 수 : " + maleStudents + "명");
		System.out.println("여자 수강생의 수 : " + femaleStudents + "명");
	}
}

기본 데이터 타입(primitive type)간의 형변환은 큰 타입이 작은 타입을 포함하는 개념인 반면, 객체 참조 변수(reference type)간의 형변환은 부모클래스와 자식 클래스간의 상속 관계가 전제가 되었을 경우 자식클래스를 객체로 생성하면, 자식 클래스 타입의 참조변수를 부모 클래스 타입으로 형변환이 가능하며, 그 반대도 가능해진다.

package net.jeonsam.examples;

public class Animal {
	public String name;
	
	public String toString() {
		return name;
	}
}
package net.jeonsam.examples;

public class Duck extends Animal {
	public String name;
	
	public void fly() {
		System.out.println("파닥파닥!!");
	}
}
package net.jeonsam.examples;

public class Dog extends Animal {
	public String name;
	
	public void bark() {
		System.out.println("멍멍!!");
	}
}
package net.jeonsam.examples;

public class InheriTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Dog2 dog = new Dog2();
		Animal2 duck = new Duck();
		Animal2 animal = new Animal2();
		
		dog.name = "바둑이";
		duck.name = "도날드 덕";
		animal.name = "짐승!";
		
		System.out.println(dog.name);
		System.out.println(duck.name);
		// 자식클래스를 부모클래스로 형변환 가능
		System.out.println(((Animal2)dog).name);
		// 원래 자식클래스로 되돌림
		System.out.println(((Duck)duck).name);
		// 부모클래스를 자식클래스로 형변환
		System.out.println(((Duck)animal).name); // Runtime Exception 클래스간 형변환 오류!!
	}

}

package net.jeonsam.examples;

public class Car {
	public int wheel;
	public String color;
	public int door;
	private int speed;
	
	public void speedUp() {
		speed++;
	}
	
	public void speedUp(int speed) {
		this.speed += speed;
	}
	
	public void speedDown() {
		/*if (speed <= 0)
			speed = 0;
		else
			speed--;*/
		speed = (speed <= 0) ? 0 : speed - 1;
	}
	
	public void speedDown(int speed) {
		this.speed = (this.speed - speed <= 0) ? 0 : this.speed - speed;
	}
	
	public void stop() {
		speed = 0;
	}
	
	public int showSpeed() {
		return speed;
	}
	
	public String getName()	{
		String name = null;
		switch(wheel) {
		case 1:
			name = "외발자전거";
			break;
		case 2:
			name = "오토바이";
			break;
		case 3:
		case 4:
			name = wheel + "륜차";
			break;
		default:
			name = "불량품";
			break;
		}
		return name;
	}
	
	public static void main(String[] args) {
		Car myCar = new Car();
		
		myCar.color = "Red";
		myCar.wheel = 2;
		myCar.door = 0;
		
		myCar.speedUp();
		myCar.speedUp(10);
		
		/*System.out.println("현재 당신의 " +
				((myCar.wheel <= 2) ? "오토바이" : myCar.wheel + "륜차") +
				"의 속도는 " + myCar.showSpeed() + "Km입니다.");*/
		
		System.out.println("현재 당신의 " + myCar.getName() +
				"의 속도는 " + myCar.showSpeed() + "Km입니다.");
	}
}
package net.jeonsam.examples;

abstract public class Animal {
	public String name;
	public int legs;
	
	public Animal() {
		legs = 4;
		System.out.println("Animal()");
	}
	
	public Animal(String name) {
		this();
		this.name = name;
		System.out.println("Animal(" + name + ")");
	}
	
	public String toString() {
		return name;
	}
	
	abstract public String action();
}
package net.jeonsam.examples;

public abstract class Mammalia extends Animal {
	public String species;
	
	public Mammalia() {
		System.out.println("Mammalia()");
	}
	
	public Mammalia(String species) {
		this();
		this.species = species;
		System.out.println("Mammalia(" + species + ")");
	}
}
package net.jeonsam.examples;

public class Dog extends Mammalia {
	public Dog() {
		System.out.println("Dog()");
	}
	
	public Dog(String s) {
		super(s);
		System.out.println("Dog(" + s + ")");
	}
	
	public String action() {
		return ("멍멍 짖다");
	}
	
	public static void main(String[] args) {
		new Dog("진도개");
	}
}

+ Recent posts