chapter 18 IO 기반 입출력 및 네트워킹
18.1
18.2
18.3
18.4
18.5
18.6
18.7
18.8
p.995
input, output
char,byte 4개의 조합으로 사용
나머지는 하위 클래스 이다 이름에서 힌트 얻어서 (이름에힌트없는것도 있지만 API를 이용)
먼저 InputStream, OutputStream, Reader, Writer 먼저보겠슴돠
inputstream에 fileinputStream
package p18Io.p3lecture.p01inputstream;
public class Ex01
isread() // read : 1 byte를 읽고 리턴
// 더이상 읽을 내용이 없으면 -1 리턴
결과값
public class Ex02
결과값
quizEx01
//while () // InputStream.read() 를 사용해서 loop가 몇 번 실행되었는지 size에 저장
결과값
Ex03
교재 997쪽 read(byte[] b) 참고
결과값
Ex04
결과값
처음에 cnt가 10이겠죠? 그래서 10개씩 돌다가
10개씩 읽다가
마지막에 cnt 4개가 되고 data[0]~data[3] 까지 읽고 종료가 됩니다
나머지 6개는 전에 입력된것이 남아있지만 우리에게는 필요가 없어서 신경 안써도 됩니다.
quizEx02
바이트 크기 계산
결과값(내파일의크기가 7196bytes라서)
Ex05HandleException
is.close();는 무조건 실행 되어야함
교재438쪽
String name = "없는파일";
InputStream is;
try {
is = new FileInputStream(name);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(is.read() != -1) {
System.out.println("읽음");
}
is.close();
을 고치는것..?
허허 .. 이건 나중에하죠...
코드는 남겨둡시당
package p18Io.p03lecture.p01inputstream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Ex05HandleException {
public static void main(String[] args) {
String name = "없는파일";
InputStream is = null;
try {
is = new FileInputStream(name);
while (is.read() != -1) {
System.out.println("읽음");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void method() {
// try-with-resource
// 책 438쪽
String name = "없는파일";
try (InputStream is = new FileInputStream(name);) {
// 정상적으로 할 일
while (is.read() != -1) {
System.out.println("읽음");
}
} catch (Exception e) {
e.printStackTrace();
}
// finally 블록에서 close 메소드 실행 생략 가능
}
}
18.2.2 OutputStream
package p18Io.p03lecture.p02outputstream;
public class Ex01
폴더 주소 가져올때 그 폴더안에 있는 파일 아무거나 속성 들어가서
위치를 복붙..하면 연습할대 좋아용
결과값
이렇게 나오는데 파일 들어가면 메모장 outtest1 이생기고 내용이 생겼다.
quizEx03
결과값
quizEx03
quizEx01에서 파일 크기 확인했는데요
quizEx01에서 그림파일을 이용해서
내용을 복사해서 파일을 만들어보세요
//각자 가진 그림 파일을 내용으로 채워진 새 파일 만들기
//파일명 outtest2.jfif(원본 파일 확장자 사용)
// 원본 파이로가 같은 크기, 같은 내용
내가한것은
그의 결과값
선생님이하신거
결과값
package p18Io.p03lecture.p02outputstream;
public class Ex02
write(byte[] b)
실행결과 (4바이트가 저장)
Ex02 +알파
os.write(datas); 두번쓰면..?
결과값
quizEx05
// 파일명:outtest4.txt
// 파일크기:1Mbytes = 1024*1024bytes
// 내용은 상관없음
// 파일 만들어보기
// OutputStream.write(byte[]) 사용해보기
결과값
package p18Io.p03lecture.p02outputstream;
public class Ex03
이렇게하면
파일 크기가 달라짐 마지막에 96개만 필요한데 100byte 를 가져와서썻으니 남는 4byte가 있다
write (byte[] b , int off, int len) 이용
결과값
같은 바이트 값이 나오게됨
그렇다면
일반적으로 사용할 수 있게 해보면..
Ex04
결과값
7,196byte값으로 같게 나옴
결과값
is.read(datas) 에서 100개씩 넣고 읽는 크기를 출력문을 통해 알려주다가
마지막에 96개의 크기르 읽고 해줌
FileReader
Ex01
FileReader(String fileName)
한글표현할때 여러 표현방법이 있다
자바에서는 2바이트로 표현할 수 있는데
저장한 문서는 3바이트로도 저장되어 질 수 있다.
문자로 작성된 데이터가 모여있는건지 그림,동영상처러 문자가 아닌것들이 모인건지
InputStream 인지 Read로 쓸지 부터 일단 챙겨주자
r.read(); 값을 읽을께 없다면 -1을 리턴합니다.
결과값
Ex02
결과값
quizEx06
결과값
quizEx07
p15collection.p02quiz.p03map;
public class Ex09 참조 하기 입니다.
//str의 문자가 몇번 나오는지
//문자를 key 몇번을 value 로 갖는 map 만들어서 return
이거랑 비슷한데 text장을 읽어서 거기 안에있는걸 문자 하나씩 읽은상태에서
그걸 비교하면서 없으면 map.put( (char c), 1);
그문자 있으면 map.put( (char) c, map.get((char) c) +1 );
map은 덮여쓰기가 되니깐 key값인 (char) c에 value값을 map.get( (char) c) +1); 기존에 있던 value값에 +1을한다
quizEx07
quizEx07Test(초록불나옴)
package p18Io.p03lecture.p05randomAccessFile;
public class Ex01
결과값
iotest안에 raf.txt 생성 및 abc 입력상태
Class RandomAccessFile에서
(다음 읽기 또는 쓰기가 발생할 파일 시작 부분부터 측정되는 파일 포인터 오프셋을 설정합니다. 오프셋은 파일 끝을 넘어서 설정할 수 있습니다. 오프셋을 파일 끝을 넘어서 설정해도 파일 길이는 변경되지 않습니다. 파일 길이는 오프셋이 파일 끝을 넘어 설정된 후에 쓰기에 의해서만 변경됩니다.) 파파고 번역....
raf.seek(1);가 (1)로 돌아가서 다시 쓸수 있게 해주는 것 같다.
결과값을 보면
기존에 abc밖에 없었는데
16라인에서 raf.seek(1) 로 인하여 포인트가 b로 돌아간후
거기서 부터 다시 입력되어서 love가 써 진것 같다.
정확히 어디쓰이는지는 모르겠지만 메서드 하나 사용해보았습니다.
'Java 공부 > 자바 공부 (baek)' 카테고리의 다른 글
Chapter08 인터페이스 exercises (0) | 2021.09.30 |
---|---|
2021-09-30 (0) | 2021.09.30 |
2021-09-28 람다식~ (0) | 2021.09.28 |
2021-09-27 오후 14. 람다식 (0) | 2021.09.27 |
2021-09-27 13.4,5,6 제네릭 + 와일드카드 (0) | 2021.09.27 |