본문 바로가기
Back-end/JAVA & Spring

[Java] 파일 입출력 FileOutputStream [북붙따라하기]

by 꼬바리 2021. 5. 28.

FileOutputStream : byte단위로 파일을 기록하는 클래스 입니다.

사용 예제 ) 코드를 복붙 하여 실행해 보시기 바랍니다.

설명은  주석과 코드 아랫부분에  있습니다.

 

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

public class Sample {

	public static void main(String[] args) {

		try {

////////////////// 파일 스트림을 이용한 파일에 내용을 기록하는 예제 입니다.

			// 기존의 파일이 없으면 만들어지고 있으면 덮어쓰게 되어 기존 파일내용이 지워진다.
			FileOutputStream fos = new FileOutputStream("c:/temp/java/test/test.txt");
			
			//기존 파일에 내용을 추가 할려면 두번째 인자로 true를 적어 준다. true를 추가해도 없으면 만든다.
			//FileOutputStream fos1 = new FileOutputStream("c:/temp/java/test/test.txt",true);

			// 파일에 저장할 내용
			String strText = " 파일에 저장될 문자열 입니다.\n Hellow world !!";

			// 문자열을 바이트배열로 변환해서 파일에 저장한다.
			fos.write(strText.getBytes());

			// 사용이 끝나면 파일 스트림을 닫습니다.
			fos.close();

////////////////////기록한 파일을 FileInputStream 을 이용해 출력하는 예제 입니다.

			// file open..
			FileInputStream fis = new FileInputStream("c:/temp/java/test/test.txt");

			// 파일의 내용을 byte단위로 읽어옵니다.그래서
			// 읽어서 저장할 버퍼 byte 배열 설정
			byte[] byteBuff = new byte[9999];

			// 파일을 읽고 읽은 크기를 nRLen 에 저장한다.
			int nRLen = fis.read(byteBuff);

			// 출력을 위해서 byte배열을 문자열로 변환
			String strBuff = new String(byteBuff, 0, nRLen);

			// 읽은 내용을 출력 합니다.
			System.out.printf("읽은 바이트수[%d] : \n읽은 내용 :  \n%s \n", nRLen, strBuff);

			// 사용이 끝나면 파일 스트림을 닫습니다.
			fis.close();

		} catch (Exception e) {

		}

	}
}
//결과는 :

//읽은 바이트수[46] : 
//읽은 내용 :  
// 파일에 저장될 문자열 입니다.
// Hellow world !! 

 

InputStream과 는 반대로 자바 JVM의 입장에서 바이트 배열을 파일로 내보내는 역할을 하는 클래스입니다

 

// 기존의 파일이 없으면 만들어지고 있으면 덮어쓰게 되어 기존 파일내용이 지워진다.
FileOutputStream fos = new FileOutputStream("c:/temp/java/test/test.txt");
			
//기존 파일에 내용을 추가 할려면 두번째 인자로 true를 적어 준다. true를 추가해도 없으면 만든다.
FileOutputStream fos1 = new FileOutputStream("c:/temp/java/test/test.txt",true);

파일이 존재하면 삭제 후 생성되기 때문에 기존의 파일이 지워집니다.

새로운 파일을 만들더라도 true를 사용하는 밑의 예제를 사용하는 경우도 있다.

 

InputStream과 같이 사용 후에는 반드시 close( ) 해줘야 파일에 접근할 수가 있습니다.

이런 몇 가지만 조심하면 웬만한 데이터는 SQL 없이 파일로 사용이 가능하다.

접근하기도 좋고 DB보다는 파일이 편리할 때가 많이 있습니다.

아래는 실전 예제입니다.

 

 

클랄이언트로 부터 온 플래그를 tcpsvrchild3에서 플래그별로 분류 해서 파일정보를 보내면 
서버에 파일이 있는지 확인하고 없으면 만들고 있으면 있는 정보를 돌려준다. 
읽기만 하고 기록하지는 않는다. */ 
import java.io.BufferedInputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
public class SvrFileRead { 

	String strBuff=""; 
	String strCurrentMsg = null; String strFilename;
	byte[] byteBuff = new byte[9999];// 사원파일을 읽어들일 바이트 버퍼 
	int nRLen; //파일이 저장될 디렉토리 이름 
	
    public void sfrFunc(String strDir,String strFileName) throws Exception {
	// 디렉토리가 있는지 확인하고 없으면 만듬
		File dir = new File(strDir); 
		if (dir.exists() == false) {
			boolean t = dir.mkdirs(); 
  		  if (t == true) strCurrentMsg = "디렉토리가 정상적으로 만들어 졌습니다."; 
    		//System.out.println(strCurrentMsg);
    	} // 파일이 있는지 확인하고 없으면 만듬 
    File file = new File(strFileName); 
    boolean trueNewFile = file.createNewFile(); 
   
   if (trueNewFile) { strCurrentMsg = "파일이 없어 파일을 만들었 습니다."; 
    //System.out.println(strCurrentMsg); } 
    // 파일이 존재하면 실행하는 부분 
    else if (file.exists() == true) {
    try { FileInputStream fis = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(fis); 
    nRLen = bis.read(byteBuff);
    if (nRLen < 0) {
    strCurrentMsg = "---파일이 비었습니다--";
    //System.out.println(strCurrentMsg); //System.out.println("here");
    } else {
    strBuff = new String(byteBuff, 0, nRLen); 
    strCurrentMsg = "기존 파일이 존재합니다."; 
    //System.out.println(strCurrentMsg); 
    //System.out.printf("읽은 바이트수[%d] : 읽은 내용\n[%s]\n", nRLen, strBuff); 
    } 
    bis.close(); 
    fis.close(); // try 끝
    } catch (FileNotFoundException e) {
    //System.out.println("SfrFileRead 예외 발생 66: " + e.getLocalizedMessage());
    e.printStackTrace(); 
    } 
    } 
    } 
    }

 

 

설명 끝.

 

 

출처 : https://hey79.tistory.com/54?category=949756

728x90
반응형

댓글