File 클래스
파일 자체를 관리하는 클래스이다. 파일의 정보를 가져오고 수정하고, 생성, 삭제를 하는 메서드를 제공한다.
파일 객체 생성
File file = new File("C:\\java\\abc.txt");
C드라이브 java디렉토리 안에 abc.txt에 대한 File 객체를 생성
파일과 디렉토리 정보 가져오기
메서드 | 내용 |
boolean exsists() | 파일/디렉토리가 있으면 true, 없으면 false 리턴 |
boolean isFile() | 파일이면 true, 아니면 false 리턴 |
boolean isDirectory | 디렉토리면 true, 아니면 false 리턴 |
String getName() | 파일의 이름을 반환 |
String getPath() | 파일의 경로를 반환 |
long size() | 파일의 크기를 반환 |
File[] listFiles | 디렉토리 안의 파일목록을 File배열로 반환 |
boolean createNewFile() | 내용이 없는 새로운 파일 생성 |
boolean mkdir() | 디렉토리 생성 |
boolean delete() | 파일을 삭제 |
- 예제코드
경로 안에 있는 모든 파일과 디렉토리 리스트 출력
```
public class showFile {
public static void main(String[] args) {
String path = "C:\\Users\\89201\\java_work\\javaBasic\\src";
File file = new File(path);
if(file.exists() && file.isDirectory()) {
fileList(file);
}
}
public static void fileList(File file) {
File list[] = file.listFiles();
for (int i = 0; i < list.length; i++) {
if (list[i].isFile()) {
System.out.println("-" + list[i].getName());
} else if (list[i].isDirectory()) {
System.out.println("*" + list[i].getName());
fileList(list[i]);
}
}
}
```
}
- 예제코드 2
경로 안에 있는 모든 디렉토리와 파일을 복사하여 새로운 디렉토리에 생성
CopyUtil.java
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class CopyUtil {
//새로운 디펙토리를 생성하고 그 안에 모든 파일을 복사
public static void copyDirectory(File source, File dest) throws Exception {
dest.mkdir();
File list[] = source.listFiles();
for(int i = 0; i < list.length; i++) {
File sourceFile = list[i];
if(sourceFile.isDirectory()) {
File s_destFile = new File(dest, sourceFile.getName());
copyDirectory(sourceFile, s_destFile);
} else if(sourceFile.isFile()){
File destFile = new File(dest, sourceFile.getName());
copyFile(sourceFile, destFile);
}
}
}
//바이트값을 가진 파일을 복사
public static void copyFile(File source, File dest) throws Exception {
FileReader reader = null;
FileWriter writer = null;
char arr[] = new char[1000];
int count = 0;
reader = new FileReader(source);
writer = new FileWriter(dest);
while((count = reader.read(arr)) != -1) {
writer.write(arr);
}
if(reader != null)
reader.close();
if(writer != null)
writer.close();
}
}
Main.java
import java.io.File;
public class Main {
public static void main(String[] args) {
// 1.바이트스트림을 이용하여 파일 복사를 구현
String source = "C:\\Users\\89201\\Desktop\\ddd";
String dest = "C:\\Users\\89201\\Desktop\\ddd2";
try {
CopyUtil.copyDirectory(new File(source), new File(dest));
System.out.println("복사완료");
} catch (Exception e) {
e.printStackTrace();
}
}
}
직렬화(Serialization)
직렬화 : 객체를 스트림으로 만드는작업
역직렬화 : 스트림을 객체로 만드는 작업
java.io.Serializable 인터페이스를 구현한 클래스는 직렬화가 가능하고 구현되어 있지 않다면 직렬화가 불가능하다.
생성자, 메서드 , static필드는 직렬화 대상이 아니고 인스턴스 변수는 직렬화의 대상이 된다.
인스턴스 변수 중 직렬화 대상에서 제외하고 싶다면 transient를 앞에 명시해 준다. (ex. password)
- 예제 코드
Member.java
import java.io.Serializable;
public class Member implements Serializable {
private String name;
private int age;
public Member() {}
public Member(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Member [name=" + name + ", age=" + age + "]";
}
}
SerialMain.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerialMain {
Member m;
//직렬화
public void write() {
m = new Member("홍길동", 20);
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("object.ser"));
oos.writeObject(m);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
//역직렬화
public void read() {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("object.ser"));
m = (Member) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ois.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
public static void main(String[] args) {
SerialMain se = new SerialMain();
se.write(); //직렬화
se.m = null;
se.read(); //역직렬화
System.out.println(se.m);
}
}
'Java' 카테고리의 다른 글
[Java] 쓰레드(Thread) 정리 (0) | 2020.07.26 |
---|---|
[Java] 정렬(Sort) Comparator, Comparable (0) | 2020.07.24 |
[Java] 자료구조 List, Set, Map (0) | 2020.07.24 |
[Java] 입출력(IO) 정리 (0) | 2020.07.22 |
[Java] 정규표현식(Regular Expression) (0) | 2020.07.20 |