본문 바로가기

Java

FileInputStream && FileOutputStream

반응형

FileInputStream
FileOutputStream

파일에 한 바이트씩 자료 읽고 쓰는데 사용.

입력스트림은 파일 없을 때 예외
출력스트림은 파일 없을 때 생성 & 출력

try{

FileInputStream fls = new FileInputStream("input.txt');

int i;
//파일 끝에서 -1 출력
while( (i = fls.read()) != -1){

System.out.println((char)i);
}

}
catch (Exception e)
{

  System.out.println(e);
}finally{

try{

 fls.cloes();
} catch(Exception e)
{
  System.out.println(e);
}

}

 

 

 

try{

FileInputStream fls = new FileInputStream("input2.txt');

int i;
//파일 끝에서 -1 출력
byte[] bs = new byte[10];
//지정 바이트개수 만큼 읽어 들임

while( (i = fls.read(bs)) != -1){

    for(int k =0; k<i; k++)
      System.out.println((char)bs[k]);
 //읽은 개수만큼 문자 반환 , i에는 읽은 바이트 수가 지정됨

 //읽어들이지 않은 부분까지 출력한다면 쓰레기 값이 나옴.
}

}
catch (Exception e)
{

  System.out.println(e);
}finally{

try{

 fls.cloes();
} catch(Exception e)
{
  System.out.println(e);
}

}

 

try{

 FileOutputStream fos = new FileOutputStream("output.txt");

  fos.write(65);
  fos.write(66);
  fos.write(67);
}
catch(Exception e)
{
  System.out.println(e);

}

파일에는 abc 문자로 변환되어 저장됨
65를 저장하고 싶으면 한바이트씩 저장되므로 
  fos.write(6);
  fos.write(5);

이렇게 저장.
 

FileInputStream은 바이트 단위로 읽으므로 한글은 2바이트씩 사용하므로 깨짐 

따라서 


FileInputStream fls = new FileInputStream("input.txt");

InputStreamReader isr = new  InputStreamReader(fls);

바이트를 문자로 출력해주는 보조스트림을 사용해서 감싼 뒤에

int i ;

while((i = isr.read()) != -1)
{
 System.out.println((char)i);
}

해주면 문자 정상 출력함

이게 복잡하면 그냥 
FileReader fls = new FileReader("input.txt");

사용하면 똑같은 작용

int i ;

while((i = fls.read()) != -1)
{
 System.out.println((char)i);
}

 

 

FileWriter fw = new FileWriter("wr.txt");

fw.write('A');
fw.write("안녕하세요");

기존의 FileOutputStream은 한 바이트 씩 밖에 입력 못하는데 이것은 여러 바이트 가능.

반응형

'Java' 카테고리의 다른 글

RandomAcessFile  (0) 2019.11.08
직렬화  (0) 2019.11.08
입출력 스트림  (0) 2019.11.05
자바 연습 (스트림)  (0) 2019.11.04
예외 처리  (0) 2019.11.04