입출력 (I/O)란 ?
=> I는 input, O는 output의 약자.
=> 컴퓨터 내부 또는 외부의 장치와 프로그램간에 데이터를 주고 받는 것
자바에서 스트림이란 ''끊기지 않고 연속적인 데이터''를 말함
=> Queue 구조로 되어 있다.(FIFO)선입선출
| java.io 패키지의 주요클래스 |
설명 |
사용 |
| File |
파일 시스템의 파일 정보를 얻기 위한 클래스 |
파일을 읽을 때 |
| Console |
콘솔로 부터 문자를 입출력하기 위한 클래스 |
콘솔로 출력할 때 |
| InputStream / OutputStream(8bit)바이트 |
바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스(추상클래스) |
데이터를 입력/출력 할 때 바이트 단위 : 그림, 멀티미디어, 문자등 모든 종류의 데이터들을 주고 받음 |
| FileInputStream / FileOutputStream |
바이트 단위 입출력을 위한 하위 스트림 클래스 |
|
| DataInputStream / DataOutputStream |
| ObjectInputStream / ObjectOutputStream |
| PrintStream |
| BufferedInputStream / BufferedOutputStream |
| Reader / Writer(16bit)문자 |
문자 단위 입출력을 위한 최상위 입출력 스트림 클래스(추상클래스) |
문자 단위 : 오로지 문자만 주고 받을 수 있게 특화됨 |
| FileReader / FileWriter |
문자 단위 입출력을 위한 하위 스트림 클래스 |
|
| InputStreamReader / OutputStreamWriter |
| PrintWriter |
| Buffered |
df
File
자바는 플랫폼에대해 독립적이기 때문에 OS에 따라 다르게 동작을 해야 한다.
즉 OS마다 경로 및 파일간의 구분자가 다르기때문에 아래와 같이 사용한다.
| 변수 |
설명 |
| pathSeparator |
경로 구분자 문자(윈도우: "", 리눅스 및 유니스 계열 : "/") |
| separator |
파일간이 구분자 문자(윈도우: ";", 리눅스 : ":") |
File생성자
| 생성자 |
설명 |
| File(String pathname) |
입력한 pathname(파일명 포함) 경로 파일의 객체를 생성한다. |
| File(String parent, String child) |
parent 디렉토리 경로의 child 파일에 대한 객체를 생성한다. |
| File(File parent, String child) |
파일 객체 parent의 child 파일에 대한 객체를 생성한다. |
| File(URI uri) |
uri 경로에 대한 파일 객체를 생성한다. |
File 메소드
(파일 조회 관련)
| 메소드 |
설명 |
| File getAbsoluteFile() |
파일의 절대 경로를 반환한다. |
| String getAbsolutePath() |
파일의 절대 경로를 문자열로 반환한다. |
| File getCanonicalFile() |
파일의 정규 경로를 반환한다. |
| String getCanonicalPath() |
파일의 정규 경로를 문자열로 반환한다. |
| String getName() |
파일이나 폴더의 이름을 넘겨준다. |
| String getParent() |
부모 경로에 대한 경로명을 문자열로 반환한다. |
| File getParentFile() |
부모 폴더를 File의 형태로 반환한다. |
| String getPath() |
파일의 경로를 문자열의 형태로 반환한다. |
| long getTotalSpace() |
하드디스크의 총 용량을 반환한다. |
| long getUsableSpace() |
하드디스크의 사용 가능한 용량을 반환한다. |
| long getFreeSpace() |
하드디스크의 남은 공간을 반환한다. |
| int hashCode() |
hash code를 반환한다. |
| long lastModified() |
해당 경로 파일의 최종 수정 일자를 반환한다. |
| long length() |
해당 경로 파일의 길이를 반환한다. |
| Path toPath() |
java.nio.file.Path 객체로 반환한다. |
| URI toURI() |
URI 형태로 파일 경로를 반환한다. |
| File[] listRoots() |
하드디스크의 루트 경로를 반환한다. |
| String[] list() |
경로의 파일들과 폴더를 문자열 배열로 반환한다. |
| String[] list(FilenameFilter filter) |
filter에 만족되는 파일들과 폴더 이름을 문자열 배열로 반환한다. |
| File[] listFiles() |
해당 경로의 파일들과 폴더의 파일을 배열로 반환한다. |
| File[] listFiles(FileFilter filter) |
filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. |
| File[] listFiles(FilenameFilter filter) |
filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. |
파일 조작(생성, 수정, 삭제 관련)
| 메소드 |
설명 |
| boolean createNewFile() |
주어진 이름의 파일이 없으면 새로 생성한다. |
| static File createTempFile(String prefix, String suffix) |
파일명에 prefix와 suffix(null이면 .tmp)를 붙여 임시 파일을 기본 임시 파일 디렉토리에 생성한다. |
| static File createTempFile(String prefix, String suffix, File directory) |
파일명에 입력한 prefix와 suffix(null이면 .tmp)를 붙여 directory에 임시 파일을 생성한다. |
| boolean delete() |
파일이나 디렉토리를 삭제한다. 단, 디렉토리가 비어있지 않으면 삭제할 수 없다. |
| void deleteOnExit() |
자바 가상 머신이 끝날 때 파일을 삭제한다. |
| boolean mkdir() |
해당 경로에 폴더를 만든다. 생성 성공하면 true, 실패하면 false을 반환한다. |
| boolean mkdirs() |
존재하지 않는 부모 디렉토리까지 포함하여 해당 경로에 폴더를 만든다. |
| boolean renameTo(File dest) |
파일를 dest 로 변경한다. 이름뿐 아니라 경로도 변경된다. |
파일 체크 관련
| 메소드 |
설명 |
| boolean exists() |
파일의 존재 여부를 반환한다. |
| boolean isAbsolute() |
해당 경로가 절대 경로인지 여부를 반환한다. |
| boolean isDirectory() |
해당 경로가 디렉토리인지 여부를 반환한다. |
| boolean isFile() |
해당 경로가 file 인지 여부를 반환한다. |
| boolean isHidden() |
해당 경로가 숨김 파일인지 여부를 반환한다. |
파일 권한 관련
| 메소드 |
설명 |
| boolean canExecute() |
파일 실행 권한이 있는지 여부를 반환한다. |
| boolean canRead() |
파일을 읽기 권한이 있는지 여부를 반환한다. |
| boolean canWrite() |
파일을 씨기 권한이 있는지 여부를 반환한다. |
| boolean setExecutable(boolean executable) |
파일 소유자의 실행 권한을 설정한다. |
| boolean setExecutable(boolean executable, boolean ownerOnly) |
파일의 실행 권한을 소유자 또는 모두에 대해 설정한다. |
| boolean setReadable(boolean readable) |
파일의 소유자의 읽기 권한을 설정한다. |
| boolean setReadable(boolean readable, boolean ownerOnly) |
파일의 읽기 권한을 소유자 또는 모두에 대해 설정한다. |
| boolean setReadOnly() |
파일을 읽기 전용으로 변경한다. |
| boolean setWritable(boolean writable) |
파일의 소유자의 쓰기 권한을 설정한다. |
| boolean setWritable(boolean writable boolean ownerOnly) |
파일의 쓰기 권한을 소유자 또는 모두에 대해 설정한다. |
예제
폴더생성과 txt 파일생성하는 간단 예제
package java_io;
import java.io.File;
public class File_Directory {
public static void main(String[] agrs) {
String dir = "C:\\File_Test";
File file;
try {
file = new File(dir);
if(file.exists()) {
System.out.println("존재합니다.");
}else {
file.mkdir();
System.out.println("존재하지않아 폴더를 생성 했습니다.");
}
try {
file = new File(dir+"\\file1.txt");
if(file.exists()) {
System.out.println("이미 존재하는 txt파일");
}else {
file.createNewFile();
//file = File.createTempFile("앞에붙일단어_", ".txt", new File(dir));
// 임시파일을 생성 할 수 있다.
// 임시이므로 끝나고 삭제를 해주어야한다.
// 안하면 수많은 임시파일이 남게됨
//file.deleteOnExit();
System.out.println("txt파일 생성");
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
InputSream
입출력 대상에 따라 스트림 달라짐
1. 파일: FileInputStream / FileOutputStream
2. 메모리(byte 배열) : ByteArrayInputStream / ByteArrayOutputStream
3. 프로세스(프로세스간 통신) : PipedInputStream / PipedInputStream
4. 오디오 장치 : AudioInputStream / AudioOutputStream
| 메소드 |
설명 |
| int available() |
현재 읽을 수 있는 바이트 수를 반환한다 |
| void close() |
현재 열려있는 InputStream을 닫는다 |
| void mark(int readlimit) |
InputStream에서 현재의 위치를 표시해준다 |
| boolean markSupported() |
해당 InputStream에서 mark()로 지정된 지점이 있는지에 대한 여부를 확인한다 |
| abstract int read() |
InputStream에서 한 바이트를 읽어서 int값으로 반환한다 |
| int read(byte[] b) |
byte[] b 만큼의 데이터를 읽어서 b에 저장하고 읽은 바이트 수를 반환한다 |
| int read(byte[] b, int off, int len) |
len만큼 읽어서 byte[] b의 off위치에 저장하고 읽은 바이트 수를 반환한다 |
| void reset() |
mark()를 마지막으로 호출한 위치로 이동 |
| long skip(long n) |
InputStream에서 n바이트만큼 데이터를 스킵하고 바이트 수를 반환한다 |
예제
.txt파일에 잇는거 콘솔에 출력하기
point :
1) int i 를 형변환시켜 char 바꾼후 출력
2) 마지막에 close();
3) 1byte씩 읽어옴
package java_io;
import java.io.File;
import java.io.FileInputStream;
public class File_Directory {
public static void main(String[] agrs) {
FileInputStream input = null;
File file = new File("C:\\File_Test\\file1.txt");
try {
input = new FileInputStream(file);
int i =0;
while((i= input.read()) != -1) {
System.out.print((char)i);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
input.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
.txt파일에 잇는거 콘솔에 출력하기(buffer)
point :
1) byte[] buffer = new byte[512]버퍼사용
2) write 메서드사용
3) 마지막에 close()
package java_io;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class File_Directory2 {
public static void main(String[] args) {
FileInputStream input = null;
try{
// 화면에 표시하고자 하는 파일을 선택한다.
File file = new File("C:\\File_Test\\file1.txt");
// FileInputStream 는 File object를 생성자 인수로 받을 수 있다.
input = new FileInputStream(file);
int readBuffer = 0;
byte [] buffer = new byte[512]; //이부분과 read(여기부분추가) 이 추가됨
while((readBuffer = input.read(buffer)) != -1) {
System.out.write(buffer, 0, readBuffer); //byte출력할 때 write씀
//write(buffer,index,index)buffer에있는 자료의/index부터/index갯수만큼 자료출력
}
} catch (IOException e) {
System.out.println(e);
} finally {
try{
// 생성된 InputStream Object를 닫아준다.
input.close();
} catch(IOException io) {}
}
}
}
OutputStream
| 메소드 |
설명 |
| void close() |
OutputStream을 닫는다 |
| void flush() |
버퍼에 남아있는 출력 스트림을 출력한다 |
| void write(byte[] b) |
버퍼의 내용을 출력한다 |
| void write(byte[] b, int off, int len) |
b배열 안에 있는 시작 off부터 len만큼 출력한다 |
| abstract void write(int b) |
정수 b의 하위 1바이트를 출력한다 |
예제
.txt파일에 복사하기
point :
1) 출력하는 대상을 만든후(output) 객체에.write를 사용
package java_io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class File_Directory2 {
public static void main(String[] args) {
FileInputStream input = null;
FileOutputStream output = null;
try{
// 화면에 표시하고자 하는 파일을 선택한다.
File file = new File("C:\\File_Test\\file1.txt");
File file2 = new File("C:\\File_Test\\file1_copy.txt");
// FileInputStream 는 File object를 생성자 인수로 받을 수 있다.
input = new FileInputStream(file);
output = new FileOutputStream(file2);
int readBuffer = 0;
byte [] buffer = new byte[512]; //이부분과 read(여기부분추가) 이 추가됨
while((readBuffer = input.read(buffer)) != -1) {
output.write(buffer, 0, readBuffer); //byte출력할 때 write씀 //write()버퍼에있는 자료의/index부터/index갯수만큼
}
} catch (IOException e) {
System.out.println(e);
} finally {
try{
// 생성된 InputStream Object를 닫아준다.
input.close();
} catch(IOException io) {}
}
}
}