바이트스트림

   - FileInputStream / FileOutputStream 

   - FilterInputStream /FilterOutputStream 

   - BufferedInputStream / BufferedOutputStream

   - DataInputStream / DataOutputStream

   - DataInputStream / DataOutputStream

문자스트림

   - BufferedReader / BufferedWriter

   - BufferedReader / BufferedWriter

   - BufferedReader / BufferedWriter

 

참고사이트 http://devkuma.com/books/pages/91

'Java > java.io' 카테고리의 다른 글

File, FileOutput Stream / FileOutput Stream(1)  (0) 2022.01.08

입출력 (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) {}
        }
    }

}

'Java > java.io' 카테고리의 다른 글

io 추가적으로 공부할 것(기본임)  (0) 2022.01.10

+ Recent posts