posted by changhozz 2012. 7. 19. 15:49

(byte 기반)                                     (char 기반)
바이트기반 스트림은                      문자기반 스트림은

FIleInputStream              이고         FileReader
FileOutputStream                           FileWriter                 이다.

즉 InputStream =>  Reader
   OutputStream => writer  로 바뀐것뿐.

보조스트림 또한

BufferedInputStream        이고         BufferedReader
BuffredOutputStream                       BufferedWriter        이다.

 

FileInputStream에서 원하는 파일의 내용을 읽어올때.

public class FileInputStreamTest {
 public static void main(String[] args) throws Exception {
  byte[] by = new byte[100];   //바이트기반이므로 무조건 바이트단위로 읽어오기때문에
                                              //읽어올 내용을 바이트 형으로 담아줄 배열이 필요
  File directory = new File("d:\\"); // 원하는(찾고자하는 파일이있는) 디렉토리를 File객체에 담아줌.
  File file = new File(directory, "cv.txt"); //원하는 파일의 디렉토리와 원하는 파일의 이름을 File객체에 담음
  FileInputStream fis = new FileInputStream(file);   //이제 담은 파일 객체를 읽어올수있도록 스트림 형성.
  System.out.println(fis.read(by));  // read()메서드를 이용하여 파일을 읽어옴.
  
 }
}

read()에는 내용을 담아올 바이트 배열을 넣어줌.

근데 read는 int 형이기 때문에 숫자가 나올거임.

내가 cv.txt쓴글 "안녕해"를 그대로 출력하려면?

public class FileInputStreamTest {
 public static void main(String[] args) throws Exception {
  byte[] by = new byte[100];   //바이트기반이므로 무조건 바이트단위로 읽어오기때문에
                                              //읽어올 내용을 바이트 형으로 담아줄 배열이 필요
  File directory = new File("d:\\");       // 원하는(찾고자하는 파일이있는) 디렉토리를 File객체에 담아줌.
  File file = new File(directory, "cv.txt");   //원하는 파일의 디렉토리와 원하는 파일의 이름을 File객체에 담음
  FileInputStream fis = new FileInputStream(file);   //이제 담은 파일 객체를 읽어올수있도록 스트림 형성.
  fis.read(by);  // 배열 by에 파일 내용을 담았단 뜻.
  System.out.println(new String (by)); //byte는 1byte단위로 끊어 읽어오기때문에 String형으로 캐스팅해줌.(자바에서 한 문자는 2byte임)
fis.close();  //닫는버릇!

 }
}
 

근데 BufferedInputStream을 하면 성능이 좋아지기 땜에 웬만하면 BufferedInputStream을 이용하자
이용방법은 그냥 추가만하면됨

package fileTest;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;

public class BufferedInputStreamTest {

 public static void main (String [] args)throws Exception{
  
  byte [] by = new byte[100];
  File directory = new File ("d:\\");
  File file_name = new File(directory,"cv.txt");
  FileInputStream fis = new FileInputStream(file_name);
  BufferedInputStream bis = new BufferedInputStream(fis);     //FileInputStream의 객체를 넣고
  bis.read(by);    //read를 할때 BufferedInputStream객체를 통해 접근하면 됨.
  System.out.println(new String(by));    //그냥 버퍼가 파일인풋 안고 간다생각하면됨.
  bis.close()  //닫는버릇!
  
 }
}

-------------------------그리고 문자기반 스트림도 똑같음!!!-----------------------------

차이점이라곤 배열을 byte가 아닌 char형으로만해주면됨!!!!!!!!!!!


 package fileTest;

import java.io.File;
import java.io.FileReader;

public class FileReaderTest {
public static void main (String [] args)throws Exception{
 
 char [] ch = new char [100];
 //File directory = new File("d:\\");   //이거 밑에줄로 한번에 쓸수있음.
 File file_name = new File("d:\\","cv.txt");
 FileReader fr = new FileReader(file_name);
 fr.read(ch);
 System.out.println(ch);
fr.close(); //닫는버릇!
}
}

 

-------------------BufferedReader 또한 똑같음--------------------------------

package fileTest;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class BufferedReaderTest {
public static void main (String [] args)throws Exception{
 
 char [] ch = new char [100];
 File file_name = new File("d:\\","cv.txt");
 FileReader fr = new FileReader(file_name);
 BufferedReader br = new BufferedReader(fr);
 br.read(ch);
 System.out.println(ch);
 br.close();      //닫는버릇!

}
}