article thumbnail image
Published 2022. 10. 12. 10:53
반응형

I/O 라는 것은 인풋 아웃풋 입니다 입 출력이라고 흔히 말하죠 

간단히 생각하면 간단 하지만 파고들수록 어렵고 아 이게 뭐지 싶습니다 후 

저도 처음 접했을때 이게 뭔가 싶었어요 그냥 파일을 만드네 음 그런가보다 

하며 넘어갔던 내용인데 자바를 통해서 웹을 개발 한다고 하면 모르면 안될 내용이라 작성합니다 

 

일단 의미부터 알아보죠 

자바에선 파일과 콘솔의 입출력을 직접 다루진 않습니다 바로 스트림을 통해서 다루는 것이죠 

이 스트림이라는 것은 실제로 사용자가 입력하거나 출력이 표현되는 흐름 이라고 알고 계시면 됩니다

 

이번 시간에는 파일의 입출력을 알아볼것인데 처음 다루는 내용인 만큼 간단한 내용으로 알아보도록 합시다 

I/O에 관련된 클래스들은 검색 해보시면 아주 상세히 나옵니다 ㅎㅎ

구조는 그렇게 파악 하시고 일단 우리는 txt확장자를 가진 메모장 파일 data.txt를 만들어봅시다 

(경로는 되도록 한글이 들어가지 않도록 해주세요 ㅎㅎ)

 

C:\git\programersStudy\studyProject\src\studyProject

저는 여기에다가 만들었습니다  git연동 해놔서 경로가 이렇습니다 

 

이 경로에 data.txt를 만들었으면 코드로 넘어가봅시다 

 

import java.io.FileInputStream;
import java.io.FileOutputStream;

import 해줘야 하는 클래스는 두개입니다 

 

        FileInputStream finput = null;
        FileOutputStream foutput = null;

필요한 클래스를 변수로 지정해주고 null로 초기화 합니다 

일단은 비어있는 상태죠 

 

여기에 파일 경로를 넣어주고 인스턴스 생성합니다 

        	finput = new FileInputStream("C:/git/programersStudy/studyProject/src/studyProject/data.txt");
        	foutput = new FileOutputStream("C:/git/programersStudy/studyProject/src/studyProject/copydata.txt");

위에 보여드렸던 경로를 지정하고 카피해서 생성될 파일의 경로와 파일네임까지 저장해놨습니다 ㅎㅎ

우리가 해볼것은 data.txt 내용을 byte 로 읽어서 copydata.txt 에 써보는거에요

 

그다음은 읽어봅시다 

            int readData = -1; // 바이트형식으로 읽어냄
            while((readData = finput.read()) != -1){ // -1 이란 읽을 데이터가 더 없을때 까지라고 생각하면 된다 
            	foutput.write(readData); // write 함수로 데이터를 읽어서 output에 쓴다 
            }

바이트 형식으로 읽어내기 때문에 -1이 되면 더이상 읽을 데이터가 없다고 생각하면 됩니다 ㅎㅎ

 

자 그럼 잘 복사 됐는지 확인 해봅시다 

data.txt

목록에 copydata.txt 가 있는지 확인해봅시다 ㅎㅎ 일단은 없죠 ??

코드를 실행해보고 데이터를 확인해 봅시다 

다행히 잘 복사가 되었네요 파일 자체를 복사 한게 아니라 데이터를 읽어서 새로운 파일에 쓴 겁니다 ㅎㅎ 

 

전체 코드를 남겨놓겠습니다 한번 확인 해보시면 좋을것 같고 다음시간엔 좀 더 딥 하게 

알아보도록 합시다 이건 걸음마도 아닌 수준이라 더 확실하게 아는 수준까지 같이 끌어올려 봅시다! 

 

	public static void main(String[] args) {

        FileInputStream finput = null;
        FileOutputStream foutput = null;
		
        try{
        	
        	finput = new FileInputStream("C:/git/programersStudy/studyProject/src/studyProject/data.txt");
        	foutput = new FileOutputStream("C:/git/programersStudy/studyProject/src/studyProject/copydata.txt");
        	//input 경로와 output 경로를 지정한 후 data.txt 데이터를 복사하여 output으로 이동시켜봅시다 
            
            int readData = -1; // 바이트형식으로 읽어냄
            while((readData = finput.read()) != -1){ // -1 이란 읽을 데이터가 더 없을때 까지라고 생각하면 된다 
            	foutput.write(readData); // write 함수로 데이터를 읽어서 output에 쓴다 
            }
            
        }
        catch(Exception e){
            e.printStackTrace();
        } 
        finally{

        	try{
        		//스트림을 열었으면 반드시 반드시!!! 닫아야 합니다 이거 굉장히 중요합니다 
            	finput.close();
            	foutput.close();
            }
            catch(Exception e){
                System.out.println(e);
            }
        }
		
		
		
	}
반응형

'Developer > Java' 카테고리의 다른 글

[java]스레드(Thread)  (0) 2022.11.29
[java]I/O_2  (0) 2022.10.13
[java]Stream  (1) 2022.10.04
[java]자바 중급 개념정리  (2) 2022.09.30
[java]자바 중급 개념정리1  (0) 2022.09.29
복사했습니다!