Properties, LIFO, FIFO, 스택, 큐, 이진트리, IO패키지, 문자 스트림, 바이트 스트림, 보조 스트림, IO File, BufferedReader, PrintWriter, InputStream, OutputStream

2019. 3. 25. 22:11JAVA

--------------------------------Properties----------------------------


properties는 Hashtable의 하위 클래스여서 특징을 가지고 있지만 차이점은

키와 값을 String값인것이다.


properties에서는 여러설정값을 저장할 수 있다. 그때는 .을 써서 작성한다.



그리고 값을 불러올때 getProperties을 사용한다.



getProperties를 사용할때 #을붙이면 주석으로 봐서 값이 null이 된다.


그리고 값을 여러줄에 걸쳐 쓰고싶을때 마지막에 한칸띄고 \를 입력하면 

한줄로 이어진다.




-----------------------------LIFO와 FIFO 컬렉션------------------------


LIFO 

스택 : 후입선출 구조

.push() 를 사용해 값을 넣고

.pop() 을 이용해서 값을 꺼내온다. 꺼내오면 객체에서 삭제한다.

.peek() 을 이용해서 값을 꺼내온다. 꺼내와도 객체에서 삭제되지않는다.



FIFO

큐 : 선입선출 구조

예시) 순서대로 해야하는것 - PC에서 프린터 출력과정

.offer(E e) 를 사용해서 객체를 넣는다.

.peek() 을 사용하여 객체하나를 가져온다. 객체를 큐에서 제거하지않는다.

.poll() 을 사용해서 객체하나를 가져온다. 객체를 큐에서 제거한다.




---------------------------이진트리------------------------------


이진트리란 여러 개의 노드가 트리형태로 연결된 구조이다.

위를 부모노드 아래를 자식노드라 하는데 부모노드를 최대 2개의 자식노드를 가질수 있다.

주로 빠른 검색을 위해 사용된다. 




--------------------------IO 패키지------------------------------


프로그램에서 데이터를 외부에서 읽고 출력하는 작업이 빈번하게 일어나는데 그것을 

실행하는 패키지가 IO패키지이다.


파일의 종류는 바이너리(이진)파일과 텍스트파일이 있다


텍스트 - 메모장으로 열리는 프로그램


바이너리(이진) 파일

이미지, 워드파일, ppt, 압축파일 등


입출력 파일 타입에 나뉜다.

바이트 스트림  - 추상메소드이며 파일업로드/다운로드, 파일저장/복사에 사용된다.

InputStream

read(), close()를 정의하고있다.


OutputStream

write(), close(), flush()를 정의하고있다.



문자(캐릭터) 스트림  - 추상메소드이며 텍스트파일의 내용읽기/내용기록 할 때 사용된다.

Read

read(), close() 를 정의하고있다.


Write

write(), close(), flush()를 정의하고있다.



Reader(입력), Writer(출력) 라 써있는것은 텍스트파일만 가능하다.


InputStream(입력), OutputStream(출력) 라 써있는것은 바이너리파일과 텍스트파일이 가능하다.

(텍스트도 가능하지만 한글은 바이트스트림이 깨져서  문자 스트림으로 한다.)




                                          (보조 스트림)

                                      문자 스트림 입력, 출력은 주로 밑 두개가 많이 쓰인다.

(BufferedReader, PrintWriter)

스트림 -----------바이트 스트림-------------InputStream

              |            |

              |            -----------------------OutPutStream

              |

              ------문자 스트림----------------Read--------------BufferedReader

                                |

                                 ---------Write--------------PrintWriter


============IO File==============


지정된 파일의 정보를 가지는 파일객체를 File이라 한다.



주로 쓰는 메소드

String .getName()

- 파일의 이름을 가지고온다.


long .length()

- 파일의 사이즈가 바이트 단위로 나온다.


String .getPath()

- 현재 파일의 경로를 나타내준다.


String .getParent()

-  현재 파일이 저장된 디렉토리 경로를 나타내준다.


boolean .isFile()

- 파일인지 여부를 반환한다.


boolean .isDirectory()

- 디렉토리인지 여부를 반환한다.


boolean .exist()

- 파일이 존재하는지 여부를 반환한다.


long lastModified()

- 파일의 최종수정일자를 유닉스시간으로 반환한다.


file.createNewFile()

- 파일생성하기


.mkdir()

- 디렉토리 생성하기


.mkdirs()

- 여러 디렉토리 생성하기


.delete()

- 파일을 삭제한다.(디렉토리 일경우 디렉토리 안에 모두 삭제되야 삭제된다.)


사용 예시)


-----------------출력---------------









==================BufferedReader==============


텍스트파일 내용을 읽어올때 사용되며 Reader로 사용할 수 있는 보조 스트림이다.

입력소스 -> BufferedReader -> 프로그램으로 구성되며

사용함으로써 외부에서 직접읽는것보다 성능이 향상된다.


주요 메소드

String .readLine()

- 지정된 파일의 내용을 한줄한줄 읽어오는것



예시)

data.txt 라는 파일에 

김유신,3,80,50,40

이순신,1,20,50,70

강감찬,2,70,60,90 이라 적고 저장한 후에




예시2) csv파일로 할경우 편집으로 utf-8로 바꾼 후




심화 예시)




===============PrintWriter==================



주요 메소드

클래스명.println()

만들 파일의 한줄로 작성되며 자동 줄바꿈이 된다.

write라는 메소드도 있지만 자동 줄바꿈이 안된다.

클래스명.flush()

원래 작성 후 버퍼에 저장이 되고 버퍼가 다차면(8kb) 파일로 보내는데

flush()는 다안채워도 바로 보내게해서 저장하는것.(close를 해도 보내지지만 flush를 쓰자.)


클래스명.close()

작성 종료



예시)