자바의 파일입출력
1. java.io : 기본 탐색기에서 이루어지는 모든 기능을 클래스로 만들어 놓은 패키지.
1bit(0,1) * 8 = 8bit = 1byte
byte 단위 (1byte) 입출력 : 이미지, 영상, 소리 등의 파일을 입출력할 때 사용 일단은 얘가 기준임
char 문자단위 (2byte) 입출력 : 한문자 단위 및 char[] <=> String 네트워크 전송할 때 이건 잘 안씀
객체 단위 입출력 : .class 단위로 입출력할 때 사용
파일과 디렉토리를 관리하는 클래스 : File
File의 CRUD 찾아놓을 것
C : createTempFile(String prefix, String suffix), createTempFile(String prefix, String suffix, File directory)
R : list(), listFiles()
U : renameTo(파일명이 같은 애의 경로를 옮김)
D : delete()
2. java.nio가 있지만 배우지는 않았다.
============================================================================
1. File 클래스가 가진 생성자와 메소드
package com.FileIO;
import java.io.File;
// File 클래스가 가진 생성자와 메소드를 살펴보자.
public class Test01 {
// File(String pathname);
public static void prn01() {
File f = new File("c:\\Utest");
if (f.exists()) {
System.out.println("이미 경로가 존재함");
} else {
f.mkdir();
System.out.println("지금 만들었음");
}
}
// File(String parent, String child);
public static void prn02() {
File f = new File("c:\\UTest", "MyTest");
f.mkdir();
}
// File(File parent, String child);
public static void prn03() {
File parent = new File("c:\\UTest");
File f = new File(parent, "MyTest02");
f.mkdir();
}
public static void main(String[] args) {
prn01();
prn02();
prn03();
System.out.println(File.pathSeparator );
System.out.println(File.pathSeparatorChar );
System.out.println(File.separator );
System.out.println(File.separatorChar );
String path = "c:" + File.separatorChar + "UTest" + File.separator + "YTest";
System.out.println(path);
File fi = new File(path);
fi.mkdir();
}
}
2. 파일위치 변경, 파일/디렉토리 확인
import java.io.File;
import java.io.IOException;
public class Test02 {
public static void disp() {
File f = new File("c:\\Utest");
File fi = new File(f, "a.txt");
// System.out.println(fi);
try {
fi.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
// 같은 폴더에 renameTo 해볼 것
public static void disp02() {
// 1. Utest 디렉토리에 있는 a.txt를 c:\\test로 이동
File fi = new File("C:\\Utest\\a.txt");
fi.renameTo(new File("C:\\Utest\\MyTest\\a.txt"));
}
// 지정된 디렉토리의 파일의 개수와 디렉토리 개수를 출력해보자
public static void disp03() {
int file_cnt = 0;
int dir_cnt = 0;
String path = "C:\\Windows\\System32";
File file = new File(path);
// 전체 목록을 File 객체의 배열로 리턴
File[] file_list = file.listFiles();
// isXX 메소드를 통해 파일과 디렉토리를 판별
// 조건에 따라 개수를 계산
for (File r : file_list) {
if (r.isFile()) {
file_cnt++;
System.out.println("dir : " + r.getName());
}
if (r.isDirectory()) {
dir_cnt++;
System.out.println("file : " + r.getName());
}
}
System.out.println("전체 개수 : " + file_list.length);
System.out.println("파일 개수 : " + file_cnt);
System.out.println("디렉토리 개수 : " + dir_cnt);
}
public static void main(String[] args) {
disp();
disp02();
disp03();
}
}
3. 문자단위 파일 입출력
// 1. 문자 단위로 파일 입출력을 하자
public class Test03 {
public static void MyWrite(File f) throws IOException {
// false가 default, true를 주면 덮어쓰기 아니고 이어쓰기 됨
FileWriter fw = new FileWriter(f, true);
fw.write("ABCDEFG\n");
fw.append("111111111111\n");
fw.write("asdfa4asdfasdfasdf\n");
char[] res = "a95y중간에 한글 되는가d".toCharArray();
fw.write(res);
fw.close();
}
public static void MyRead(File f) throws IOException {
FileReader fr = new FileReader(f);
int ch = 0;
// 파일의 끝이 -1이 될 때까지 글자를 하나씩 읽어서 ch로 리턴받아 출력하자
while ((ch = fr.read()) != -1) {
System.out.printf("%c", (char) ch);
}
fr.close();
}
public static void main(String[] args) {
String filename = "Test03.txt";
File f = new File(filename);
try {
MyWrite(f);
MyRead(f);
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. byte단위 파일입출력
package com.FileIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
// 2. byte 단위로 파일 입출력을 하자 원래목적은 이미지 영상 소리용임
public class Test04 {
public static void MyWrite(File f) throws IOException {
FileOutputStream fos = new FileOutputStream(f);
for (int i = 65; i < 91; i++) {
fos.write(i);
}
String msg = "오늘은 수요일입니다. 배고픕니다.";
fos.write(msg.getBytes());
fos.close();
}
public static void MyRead(File f) throws IOException {
FileInputStream fis = new FileInputStream(f);
int ch = 0;
while ((ch = fis.read()) != -1) {
System.out.print((char)ch);
}
fis.close();
}
public static void main(String[] args) {
File fi = new File("Test04.txt");
try {
MyWrite(fi);
MyRead(fi);
} catch (IOException e) {
System.out.println(e);
e.printStackTrace();
}
}
}
5. byte단위로 버퍼를 사용해서 입출력
package com.FileIO;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
// 4. byte 단위로 파일 입출력을 하자 버퍼를 써서
public class Test06 {
public static void MyWrite(File f) throws IOException {
// FileOutputStream fos = new FileOutputStream(f);
// BufferedOutputStream bos = new BufferedOutputStream(fos);
// OutputStream out = new OutputStream(f);
// BufferedOutputStream bos = new BufferedOutputStream(out);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));
bos.write("한글되나요~".getBytes());
bos.close(); // bos가 닫힐 때 new FileOutputStream(f) 객체도 같이 닫힘
}
public static void MyRead(File f) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
int res = 0;
while ((res = bis.read()) != -1) {
System.out.printf("%c", res);
}
bis.close();
}
public static void main(String[] args) {
File f = new File("Test06.txt");
try {
MyWrite(f);
MyRead(f);
} catch (IOException e) {
e.printStackTrace();
}
}
}
'데이터과학자 - 강의 > java' 카테고리의 다른 글
210704 Java - Collections (0) | 2021.07.04 |
---|---|
210701 Java - GUI (0) | 2021.07.01 |
210629 Java - 인터페이스, 추상클래스, 상속, 다형성 (0) | 2021.06.29 |
210626 Java - String, StringBuffer, StringBuilder (0) | 2021.06.28 |
210626 Java - 클래스, 생성자, 상속 (0) | 2021.06.26 |