[DAY25] library 연습문제 나머지, IO 입출력

NA YE SOM·2023년 8월 2일
0

Review

Exception

RuntimeException

unchecked checked

try-catch가 있든 없든 실행시키겠다

unchecked exception

checked exception

-> 예외처리 구분이 있는지 없는지 체크


-> 자바에 의해서 발생한 예외는 알아서 던진다
-> try쪽에 던진다는 개념이 보이지 않음


-> 자바에 의해서 던져짐



-> 예외를 던질때는 new를 이용해서 예외객체를 만듦
(RuntimeExcpetion)


-> 미루겠다(메소드 호출하는 곳으로 미룬다)

본문에는 try catch 없음


-> str이없을때



-> null 이 되면 nullpointexception 발생 -> 다시 호출한 쪽으로 부름

ex04_Library



-> 예외발생시 deleteboo, modifybook, querybook으로 던져주고 그 예외가 exception e로 가서 출력됨

삭제

삭제
책이 없을때 : 책이 한권도 없는데 지울 책이 없음


책을 저장했던 게 arraylist books 저장된 요소가 없을때 true를 반환

동일한 제목이면 삭제대상으로 함


-> 공백없이 입력받을 수 있는 next

isEmpty() :

입력된 title이 빈문자열인지 아닌지 확인
-> 비어있으면 (빈문자열이면) : isEmpty()

-> 상단에 throws하고 있어서 추가로 할 필요없음

isBlank() : 공백검사 + 화이트스페이스 검사 - jdk 11부터 쓸수 있음

입력된 title에 비어있다도 추가 추가로 공백만 했다(입력을 스페이스만 했다 -> 입력이 없는걸로 봐도 타당함)

(2가지 삭제 가능)
객체기반의 삭제 (동일한 객체를 찾아서 삭제)


-> 되어있음

title비교해서 같으면 같은책임

향상 for문

  • 기존의 for문에 비해서 간단하게 사용할 수 있는 for문
  • 배열이나 collectinon 자료형의 요소를 하나씩 순서대로 처리할 수 있는 for문

-일반 for문

arraylist 배열에 있는 books를 하나씩 비교하겠다
입력된 제목(title) 도서관에서 꺼내온 책(get title)

'for'문 : books 리스트에 있는 모든 책들을 순회하여 입력한 책과 일치하는 책의 제목과 일치하는 책을 찾기
'if'문 : 두개의 값을 비교함

인덱스 기반으로 지우는게 아니라 객체 기반으로 지우기 위해서 향상 for문 씀

동일한 책은 한권밖에 없으니까 동일한 책을 찾으면 더이상 진행할 필요 없이
deleteBook이라는 메소드 실행을 끝내겠음

값이 없는 return


-> 똑같은 책이 하나도 없을때 여기로 옴 (입력된 제목을 가진 책이 없을때)

for문 끝나고 다음줄로 옴




-> to string 만들어놔서 book이라고 단순 처리 가능

조회

수정


-> SCANNER쓰고 있어서 검사 확인이 안됨

실제 ) 웹화면으로 넘겼을때 빈문자처리가 가능해서
(실제에서는 동작이 가능해서)

throws 2개 던지는 방법


-> throws뒤에 , (콤마)로 연결하면 됨


-> 정수 입력하지 않으면 예외 발생함

Input/Output(입출력)

system.in system.out
file 대상으로 자바가 특정 파일의 내용을 읽을수도 있고 자바를 이용해서 특정파일을 만들 수도 있음


-> int단위로 읽을수도 있고 배열다누이로 좀 많이 읽을수있고, 라인단위로 읽을 수 있고..(읽어들이는 방법 : 여러개)
-> 파일로 원하는데이터를 보낸다.

화살표 : 스트림(stream)

input straem

output stream

입력 스트림 만들면 입력용으로만, 출력 스트림 만들면 출력용으로만 쓴다.


-> 파일 복사 프로그램도 짤 수 있음


-> 서버에 있는 파일 내 컴터에 옮긴ㅁ(따운르도)

ex01()_File




-> 지우는것도 가능


-> 리눅스 경로 작성 방법 알면 좋음(파일을 어디다 만들지 경로를 만들어야 함)


-> 맥도 슬래시(/) 씀

java에서 백슬래시 입력하는 방법 ) 하나만 쓰면 escape로 인식



-> 서로 바꿔서 들어가는 필드값이 있음


-> ctrl + space

dir(directory 줄임말)


-> 드라이브 :


-> C드라이브 아래


-> 파일객체가 이것을 타격으로 동작을 하겠음

★★(기초코드) 폴더를 적당한 주기로 두고 바꿔가면서 저장해야하는 작업 하려면 프로그래밍으로 폴더 만들기 해야 한다

exists()



-> 있으면 true반환

dirs vs dir 차이

폴더를 만들때 밑에 또다른 폴더 포함(계층적으로 사용가능)


-> mk(make)




->
한번더 실행시

-> 지워짐

(실제로는 둘다 가능함) -> /(슬래쉬)로 쓰기 : 최종적으로 리눅스에 베포될 가능성이 높아서 /(슬래쉬)로 써놓는것이 낫다


-> c드라이브나 storage 사이에

separator

File. static 멤버들 보임

File.separator
file 폴더 밑에 test.txt 텍스트 파일을 저장하기를 원하면
file\test.txt 같이 경로를 설정해줘야 함
-> 번거로움
-> JAVA에서 File.sepator 지원해줌
-> "file" + File.separator + "text.txt") 사용



-> 윈도우와 리눅스에서 모두 돌아가는 것


-> 간단히 구분자 쓰느걸로 활용가능

리눅스가 unix



디렉토리는 이미 파일객체를 만들었을 확률이 높음(파일객체로 존재할 가능성이 높아서, 파일객체는 그대로 쓰고 파일이름만 String으로 하는 경우가 많음) -> ★ 3번째로 걸로 하기!

파일시스템 )
파일이 저장된 폴더 : 부모
파일 : 자식

-> 확장자 txt로 해야 메모장하고 연결됨




-> unhandled exception : 예외 처리 안했다고 함

-> creatNewFile()은 예외처리 안하면 동작 안함

(try -catch처럼 예외처리가 있는지 없는지 체크한다고해서 checked exception 이라고 함)

  1. try-catch 우겨넣기
  2. throws로 던져버리기

2가지 방법있음




throws IOException 던지고 있음

C드라이브에 storage가 없는상태


폴더가 없음(폴더를 알아서 만들지 않음)
ex01() 폴더 만들어주는건 dir.mkdirs 호출했을때

파일을 만들거나 할때 디렉터리, 파일객체 따로 만듦
-> 이유) exception 회피하기 위해서


-> 없으면 만들어주세요


-> 존재한다니까 있으면임
그대로 쓰면 안됨

-> !(not)


-> 처음 올리는 사람이 이 코드 없이 올리면 바로 오류남


->이렇게 할수도 있지만, 서버는 이렇게 관리 x
(기본적으로 코드로 관리해야함)

★★특정 경로에 접근 : 통째로 외우기



-> 여기있는애들 다 불러와서 파일 객체로
-> 파일객체'들'이라서 [배열] 필요(자바입장에서, 디렉터리이건 파일이건 다 파일객체들임)
-> 파일 객체 8개를 불러오는 메소드


-> 저장할 File 배열 준비해야함


-> 자바 홈을 파일 객체로 만들어봄

-> 준비 File[] 배열들


-> 8개가 다 파일객체에 저장됨

StringBuilder객체를 String으로 바꾼다



-> long타입의 날짜 : TIMESTAMP임
(정수로 길게 나오는애라서 보기가 좋지 않아서 Stringbuiler으로 바꾸기)


->
-(마이너스 적는 이유) : 왼쪽정렬 위해서) 앞에다 적고 뒤에다가 공백 주려고

SimpleDateFormat 클래스 : DAY23


-> 소문자 h : 12시각제

-> 패턴으로 지정된 형식으로 바뀔 수 있음

-> 디렉터리가 맞으면 파일 폴더, 아니면 파일이라고 적기



-> 폴더는 크기가 없으니까 0임



-> 1byte -> 1KB
-> 1024byte -> 1KB
-> 1025byte => 2KB

1Kbyte(1KB) = 1024byte



-> 일단 1KB 있고 나머지가 있으면 1KB 추가하겠다

4개의 append



-> 저장되어있는애들 불러들어서 디렉터리 목록하고 db목록하고 비교해서 지울수 있는건 지우기


-> getname 뽑아서 이름 비교


-> timestamp
원하는 형식으로 위해서는

-> simpledateformat 도움 받기

★★★ ex01() , ex03() 중요함!!

ex02 쓸모없음


-> file.createNewFile() 쓸모없음
-> 우리는 파일을 내용을 채워서 만들어야 하므로

<시험 문제>

압축풀지 말고 import 하기


select archive files
-> 바탕화면에


(디폴트값으로 가지고 있음)

Parking lot 만 열어서 풀기!

주차장 최대 5개까지

-> ♨ 예외처리 안함!

ParkingLotMain에서 실행하면 됨

주차관리_실행예시 실행하는 방법 나와있음

try-catch 이전에 처리하는 방식으로 처리하면 됨(1. 추가하기 예외 )
(예외상황


이름은 상관없음


%s (String.format)

%s : 문자열은 그대로 출력
%(N)s => 앞 숫자(N) : str.length가 N보다 작을 경우 - 공백 추가
-(N)%s => - : 왼쪽 정렬
%(N)s => default(아무것도 적지 않았을경우): 오른쪽 정렬
%(N).(N1)s => 숫자(N1) : 최대 N1길이만큼 출력

출처 : https://blog.jiniworld.me/68#a03

profile
개발자 velog

0개의 댓글