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 |