본문 바로가기

Study/Java

[java] Input, Output

Input, Output 패키지

- Input/Output

키보드로부터 데이터를 입력하고, 화면으로부터 출력받았다.

Stream - 배관

프로그램인 내가 딸기우유인 file을 먹고 싶다면 Stream이란 빨대로 먹으면 된다. read로 file을 쓰고, write로 호출한다.

 

IO Exception에 대한 예외처리는 꼭 해줘야한다.

파일이 존재하지 않으면 에러가 나기 때문에 항상 예외처리는 꼭 해줘야 한다.

 

InpitStream, OutputStream

- 추상클래스 -> 추상 메소드, new 생성이 없다

read(), write()가 있다.

 

FileInputStream

- 파일로부터 바이트 데이터를 읽는 클래스(int, byte)

//키보드값을 입력받을 때 사용 (System.in)

 InputStream in = System.in;
  int a= 0;
  try {
   while((a=in.read())!= -1) {
    System.out.println((char) a);
   }
  } catch (Exception e) {}


FileOutputStream

- 바이트 데이터를 파일에 쓰는 클래스(int, byte)

public static void main(String[] args) throws Exception{

//100 바이트만큼 쓴다.
  byte buffer[] = new byte[100];
  System.out.println("입력하세요");

//키보드의 값을 입력받는다.
  System.in.read(buffer);

//FileOutputStream 생성 
  FileOutputStream fos = new FileOutputStream("aa.txt");

//파일에 바이트 데이터를 쓴다.
   fos.write(buffer);

//파일을 닫는다.
   fos.close();
 }

 

버퍼를 이용해서 입출력 성능을 향상시키는 클래스들

BufferedInputStream

- 바이트 입력 스트림을 버퍼링하는 클래스
BufferedOutputStream

- 바이트 출력 스트림을 버퍼링하는 클래스
BufferedReader

- 문자 입력스트림을 버퍼링하는 클래스
BufferedWriter

- 문자 출력스트림을 버퍼링하는 클래스


DataInputStream

- 기본형데이터를 파일로 출력하는 클래스

DataInputStream in2 = new DataInputStream(new FileInputStream("input.dat"));

//정수형의 데이터를 읽어서 data값에 넣어준다.

int data = in2.readInt(); 

in2.close();


DataOutputStream

- 기본형데이터를 파일로부터 읽는 클래스

DataOutputStream out2 = new DataOutputStream(new FileOutputStream("output.dat"));

//정수형의 데이터를 쓴다.

out2.writeInt(14);

out2.close();

 

InputStream 
InputStreamReader 
OutputStream 
OutputStreamWriter 
ObjectInputStream 
ObjectOutputStream

 

소스이해

->InputStream, OutputStream

<입력받는다>System.in

-->DataInputStream/DataOutputStream

--->readInt()/WriteInt()

-->FileInputStream/FileOutputStream

--->read()/write()

 

 

Reader, Writer

FileReader

- 텍스트 파일을 읽는 클래스 (char, String)

try {
 //1 .파일을 연다
 FileReader reader = new FileReader("a.txt");

 while(true) {
//2 .데이터를 읽는다.
//reader는 더이상 리턴할 것이 없으면 마이너스1을 리턴한다.
//char arr[] = new char[100]; int data = reader.read(arr);

  int data = reader. read();

//한꺼번에 여러문자를 읽을 때 
  char arr[] = new char[100];

  int data = reader.read(arr);

//마이너스 값이면 반복을 중단하고,
  if (data < 0)

   break;

//아니면 char타입으로 캐스트 한다.
  char ch = (char) data;

//3. 파일을 닫는다
  } reader.close();
} catch (IOException e) { 
  System.out.println("파일 없음");
}

소스이해

->FileReader

-->byte buffer = new byte[128];

-->read(buffer); //배열크기만큼읽어들인다.

-->readLine(); //한줄씩 읽어들인다.

BufferedReader br = new BufferedReader(new InputStreamReader(new InputStream("a.txt"))));

필터 = 필터(필터(노드)));

 


FileWriter

-  문자 데이터를 파일에 쓰는 클래스 (char, String)

//1. 파일을 연다
FileWriter writer = new FileWriter("output.txt");

//파일을 열 때 원래 있던 파일의 내용을 유지하고 싶으면 두번째 파라미터에 true값을 넣는다.
//원래 있던 파일의 내용 뒤에 새로 쓰는 내용이 추가된다.
FileWriter writer = new FileWriter("output.txt", true);

//2. 파일에 데이터를 쓴다.
writer.write(ch);

//3. 파일을 닫는다.
writer.close();

소스이해

->FileWriter

-->BufferedWrite

 

 

객체 직렬화

- 객체를 스트림으로 만드는 작업

- 데이터를 주고받고 할 수 있다.

Serializable 인터페이스

- 객체직렬화가 되는 지 안되는 지 확인하는 메소드.

확인하는 메소드이기 때문에 추상 메소드가 없다.


Enterprise Java Beans(EJB)

 

ObjectInputStream/ObjectOutputStream(filter)

- 이 배관을 통해 객체를 주고 받고 한다.

->readObject()/writeObject()

 

File 클래스

- 파일을 객체화 시켜서 사용한다.

->File file= new File("aa.txt");

- 실제 존재하는 aa.txt 파일을 객체화 시켰다. 이 파일 안에 있는 모든 메소드들을 핸들링할 수 있다.

이 클래스를 통해서 얻을 수 있는 파일/디렉토리 정보

- 파일 크기, 파일 이름(디렉토리 이름), 최종수정일시, 읽기가능/쓰기가능/숨김파일여부

Boolean isThere = file.exists();

->파일 or 디렉토리가 있으면 true, 없으면 false

Boolean isFile = file.isFile();

-> 파일이면 true, 아니면 false 리턴

Boolean isDir = file.isDireactory();

->디렉토리면 true, 아니면 false 리턴

Files childs[] = file.listFiles();

->파일에 있는 모든 목록들을 파일 객체를 배열화시켜서 리턴

File file1 = new File("b.txt");

file1.createNewFile();

->b.txt 파일 생성

file1.delete();

->b.txt 파일 삭제

File file2 = new File("C:\\a");

file2.mkdir();

->a 디렉토리 생성

file2.delete();

->a 디렉토리 삭제

 

내부 클래스(inner class)

- 클래스 안에 클래스가 있는 클래스

- awt이벤트할 때 잠시 사용

 

transient

- 객체 직렬화에서 제외시킬 필드를 표시하는 키워드

 

 

 

 

 

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

[java] 스레드, 소켓  (0) 2019.05.15
[java] Input, Output 실습  (0) 2019.05.15
[java] 클래스와 자료구조 실습  (0) 2019.05.15
[java] 클래스와 자료구조  (0) 2019.05.15
[java] String, StringBuffer 실습  (0) 2019.05.15