-ArrayList : 수정과 삭제가 불가. 데이터값이 인접해있어서 전체를 출력할 때 주로 사용됨. ->중간에 데이터값을 삽입하면 그 값이 바뀜. 원래 있던 값은 뒤로밀려나는 것이 아니라 삭제됨.
-LinkedList : 서로 연결되어 있다. 수정과 삭제에 용이, 실제 데이터값이 이동할 필요가 없다.
List vs 배열 : 자신이 잘 구현하는 것을 사용하기. => List가 더 편하고 간편함. list관련 메소드가 자바api로 있기 때문에
큐->배열로 하면 원통형이 되고 코드가 길어짐
그래서 큐는 list사용
★★자료구조 : 효율적인 데이터 관리
List ->순서o, 중복허용
Map -> key와 value(한 쌍), 순서x
Set -> 중복허용x, 순서x
배열 ->List
구현방법 :
-
객체 생성(제네릭 판단) ->구축됨
-
데이터추가(add, put) -count쓸필요xx
-
데이터 출력
-
for문 list.size만큼 -> get()
-
향상된 for문
-
Iterator - while (hasnext()) .next
4.데이터 검색 -> get메소드
5. 수정 : get ->add
6.삭제 -> remove
arraylist vs. linkedlist
-전체를 순회할 때(메모리가 인접해서)
-비일비재로 수정삭제가 이루어질 때(메모리의 주소값이 연결되어 있어서)->스택과 큐를 이용(linkedlist)
정렬 -> Comparable (최초의 정렬) : compareTo() 오버라이딩
Comparator(정렬기준 변경) - compare() 오버라이딩
자바끝나고 필기, 실기시험 침 => 자가테스트
10장. 파일 입출력에 사용되는 자바 클래스들
입출력은 클래스가 너무 많고 예외가 너무 많음.
입출력 클래스가 많은 이유는 : 데이터종류가 너무 많아서.
스트림 = 배관이라 생각하기
스트림 : 데이터를 운반하는데 사용되는 연결통로이다.
*3가지 카테고리
-
문자스트림(문자)/바이트(이미지, 파일),
-
입/출력
-
노드스트림(원본에 연결하는것)/필터스트림(노드스트림을 연결시킴) : 노드스트링에서 하지 못했던 것을 더 연결해서 사용.
String -> Byte : getBytes()** 데이터타입 바꾸는 메소드 중요함
java.io 자바api이용
문자스트림 : Reader&Writer
바이트스트림 : Input&Output 클래스
-FileReader
1단계 : 파일을 엽니다.
FileReader reader = new FileReader("poem.txt");
2단계 : 파일을 읽습니다.
data = reader.read(); -아스키코드 정수값 ->아스키코드 문자값
3단계 : 파일을 닫습니다.
reader.close();
예외처리할 때 -> catch문 하나만 해줘도 됨.
finally는 예외가 발생하든 안발생하든 실행되므로 reader.close를 이 안에다 넣어줌

방법1
int data = reader.read();//문자하나하나에 대한 아스키코드값 읽어옴.
if(data==-1)break;
char ch = (char)data;//아스키코드 -> 문자하나
System.out.print(ch);
다음 문자가 없을 때까지 반복 while(true) -if(data==-1)탈출조건 문
방법2
char arr[] = new char[50]; //위의 코드를 배열로 만듦.
reader.read(arr);
System.out.println(arr);
방법3(배열크기가 작을때)
FileReader reader = null;
char arr[] = new char[5];
try {
reader = new FileReader("poem.txt");
while(true) {
int data = reader.read(arr);
if(data == -1) {
break;
}
System.out.print(arr);
}
-FileWriter
FileWriter writer = null;
Scanner sc = new Scanner(System.in);
System.out.println("입력 :");
String str = "";
String poem = "";
while(!(str=sc.nextLine()).equals("q")){
poem += str;
poem += "\n";
}
try {
writer = new FileWriter("poem2.txt");
writer.write(poem);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
writer.close(); //close를 안하면 완성이 안됨.
} catch (Exception e2) {}
}
poem2파일에 나는바보다 생성됨.
-CopyExam
//poem.txt => poem3.txt copy
FileReader reader = null;
FileWriter writer = null;
char arr[] = new char[50];
try {
reader = new FileReader("poem.txt");
writer = new FileWriter("poem3.txt");
reader.read(arr);
writer.write(arr);
System.out.println("복사완료");
}
catch (Exception e) {
e.printStackTrace();
}finally {
try {
writer.close();
reader.close();
} catch (Exception e2) {}
}
-노트스트림 & 필터스트림
inputStream : byte스트림 -> 키보드 문자(바이트)로부터 문자열을 얻고싶어함.
//Scanner 외에 입출력 스트림 이용해서 데이터 입력을 구현
//System.in => Inputstream 바이트=> InputStreamReader바이트 =>BufferedReader문자열(최초의 키보드내용을 가지게됨)
//BufferedWriter(문자열) -> FileWriter(바이트)
InputStream in = System.in;
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
br = new BufferedReader(new InputStreamReader(System.in)); //위 세줄 한줄로가능
BufferedReader br = null;
BufferedWriter bw = null;
String str = "";
try {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new FileWriter("output.txt",true));//추가로 정보를 넣을 수 있게.));
System.out.print("입력 : ");
while((str=br.readLine())!=null) { //멈추려면 ctrl+z하기
str += "\n";
bw.write(str);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
bw.close();
br.close();
} catch (Exception e2) {
}
}
아침
점심
저녁
zz
bb
-ObjectInputStream/ObjectOutputStream : 내용물이 객체가 주고받음
out2.writeObject(obj); ->프로그램에 있는객체를 스트림(외부파일)으로 만드는 것을 직렬화(serialization)라고 한다.
외부파일에 있는 것을 자바파일로 가져오는 것 : 역직렬화
다만 모든 대상이 직렬화대상이 되는 것은 아니다.
---17장. 객체직렬화(serialization인터페이스)
serialization을 인터페이스 구현가능한 얘들만 객체직렬화가능.
arraylist 직렬화가능
Person 의 arraylist가 시리얼라이즈 구현해도 Person이 구현을 안하면 직렬화불가능
Person안의 연관관계에 있는 클래스들도 시리얼라이즈 구현해줘야 함.
ObjectOutputStream : 객체를 밖으로 뽑아낼때 사용하는 스트림(객체직렬화를 위한 스트림)
-
객체직렬화는 무엇인가
-
Serialization인터페이스하기
-
ObjectOutputStream과 ObjectInputStream사용하기
-Member
package Kosta.io;
import java.io.Serializable;
public class Member implements Serializable {
private String name;
private int age;
public Member() {}
public Member(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Member [name=" + name + ", age=" + age + "]";
}
}
-SerialMain
package Kosta.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerialMain {
Member m;
//직렬화
public void write() {
m = new Member("홍길동",20); //직렬화 가능 객체
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("object.ser")); //객체스트림 하나생성
oos.writeObject(m); //스트림으로 직렬화되어 파일에 저장됨.
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
oos.close();
} catch (Exception e2) {
}
}
}
//역직렬화
public void read() {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("object.ser"));
m= (Member) ois.readObject(); //m은 멤버변수
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
ois.close();
} catch (Exception e2) {}
}
}
public static void main(String[] args) {
SerialMain se = new SerialMain();
se.write(); //직렬화
se.m = null; //할당한 메모리를 삭제함.m은 주소값만 가지고 있음. 메모리가 삭제된 것은 아님. 하지만 자바는 가비지컬렉션을 가지고 있지. 자동으로 메모리가 삭제되도록
se.read();//역직렬화
System.out.println(se.m); //이 값은 파일에 있는 것을 역직렬화해서 가져온 것.
}
}
Mission phoneinfo 7.저장 8. 불러오기 구현하기
-File클래스
자바api가 사용하는 정보를 손쉽게 가져올 수 있다.
아예 파일을 객체화시켜버리자! 파일에 대한 정보를 손쉽게 가져올 수 있다.
재귀함수를 이용해 file.listFiles하면 파일들의 내용을 다 불러올 수 있다.
File file1 = new File(); 파일이라는 클래스로 객체화 한 것. 새로운 파일을 하나 생성한 것이 아니다.
file1.createNewFile(); ->파일하나생성
file2.delete(); ->파일삭제

.classpath 588 2020-07-01 23:36:56
.project 911 2020-07-01 23:37:04
.settings <DIR> 2020-07-01 23:37:04
build <DIR> 2020-07-01 23:36:55
object.ser 86 2020-07-22 15:44:39
output.txt 27 2020-07-22 12:24:32
poem.txt 47 2020-07-22 10:36:00
poem2.txt 16 2020-07-22 10:55:23
poem3.txt 78 2020-07-22 12:20:03
src <DIR> 2020-07-18 10:21:34
WebContent <DIR> 2020-07-01 23:36:56
★★오늘 해야할 일 : 1. phoneinfo배열 list바꾸는 것 완벽구현하기, 7,8 구현
2. FileMission
FileMission (폴더에 있는 리스트목록 출력하기)
public static void repeat(File file) {
File[] arr = file.listFiles();
for(int i=0;i<arr.length;i++) {
if(arr[i].isDirectory()) {//폴더가있나요
System.out.println();
System.out.println("["+arr[i].getName()+"]");
repeat(arr[i]);
} else {
System.out.println("-"+arr[i].getName()+"-");
}
}
}
public static void main(String[] args) {
//재귀함수로 디렉토리를 찾으면 그 안에 계속 들어가서
//모든 폴더의 모든 문서를 출력
String path = "C:\\Users\\mhee4\\Desktop";
File f = new File(path);
if(f.exists() && f.isDirectory()) {
repeat(f);
}
}
3. 읽기/쓰기 복습
'FULLSTACK > JAVA' 카테고리의 다른 글
JAVA 17차시 - 네트워크 통신 프로그래밍 (0) | 2020.11.13 |
---|---|
JAVA 16차시 - File, Thread (0) | 2020.11.12 |
JAVA 14차시 - 자료구조(list, map,set), 최초정렬(Comparable -> compareTo()), 정렬바꾸기(Comparator -> compare()) (0) | 2020.11.12 |
JAVA 13차시 - (자바API) 정규 표현식, 자료구조(ArrayList vs LinkedList) (0) | 2020.11.12 |
Java 주말과제 및 복습데이 - Calendar클래스 달력출력, 딱지문제 (0) | 2020.11.12 |