Java /day14 / 23.09.11(월) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 9월 11일
post-thumbnail

P15_file


ch02_byte


ByteOut

package ch02_byte;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteOut {
	public static void main(String[] args) throws IOException {
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
		if(path.exists() == false) {
			path.mkdir();
		}
		
		// 폴더 위치, 파일명을 가지는 객체 생성
		File mf = new File(path, "test.txt");
		
		// 경로에 파일이 없으면 생성
		// 예외전가를 시켜야함
		if(mf.createNewFile()) { // 예외뜨면 throws 해주기
			System.out.println(mf.getName() + " 파일 생성");
		} else {
			System.out.println(mf.getName() + " 중복 파일");
		}
		
		// 데이터 기록을 위한 통로 생성
		// 데이터 전송 통로 생성
		// 객체 생성 시 기록할 파일 위치를 가지는 객체가 필요함
		// 통로 생성시 설정이 있음 default는 이어서 작성 ㄴㄴ 다시 씀 ㅇㅇ
		// - 객체 생성시 true( 이어쓰기 ), false( 다시쓰기, default )
		
		// Output
		FileOutputStream fos = new FileOutputStream(mf, true);
//		FileOutputStream fos = new FileOutputStream(mf);
		
		
		String data = "안녕 나는 byte test 야 ㅋ\n";
		
		// 다시 실행한다고 추가로 기록되지 않음
		
		
		// byte단위이므로 String를 byte로 변환 : getBytes()
		try {
			byte[] wd = data.getBytes();
			fos.write(wd);
		} catch(Exception e){
			e.printStackTrace();
		} finally {
			// 사용했던 통로 폐쇄 / 정상 예외 상관 없이 실행
			fos.close();
		}
		
	}
}


ByteIn

package ch02_byte;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ByteIn {
	public static void main(String[] args) throws IOException {
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
		if (path.exists() == false) {
			path.mkdir();
		}

		// 폴더 위치, 파일명을 가지는 객체 생성
		File mf = new File(path, "test.txt");

		// 경로에 파일이 없으면 생성
		// 예외전가를 시켜야함
		if (mf.createNewFile()) { // 예외뜨면 throws 해주기
			System.out.println(mf.getName() + " 파일 생성");
		} else {
			System.out.println(mf.getName() + " 중복 파일");
		}

		// 데이터 전송 통로 생성 Input
		FileInputStream fis = new FileInputStream(mf);

		try {
			// byte로 읽고 int로 반환
			// 연속적으로 읽기 위해 while 문
			while (true) {
				int rd = fis.read();
				// 더이상 읽을 값이 없으면 -1을 반환함
				if (rd == -1)
					break;

				System.out.print((char)rd);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 사용 통로 폐쇄
			fis.close();
		}

	}
}


ch03_reader


ReaderOut

package ch03_reader;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class ReaderOut {
	public static void main(String[] args) throws IOException {
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
		if (path.exists() == false) {
			path.mkdir();
		}

		// 폴더 위치, 파일명을 가지는 객체 생성
		File mf = new File(path, "reader.txt");

		// 경로에 파일이 없으면 생성
		// 예외전가를 시켜야함
		if (mf.createNewFile()) { // 예외뜨면 throws 해주기
			System.out.println(mf.getName() + " 파일 생성");
		} else {
			System.out.println(mf.getName() + " 중복 파일");
		}
		
		// 데이터 전송 통로 생성
		FileOutputStream fos = new FileOutputStream(mf);
		// 데이터 타입별로 전송 / 버퍼로 처리
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		// 타입별 변환
		DataOutputStream dos = new DataOutputStream(bos);
		// 단점 : 데이터 타입에 맞는 메소드를 사용해야 함
		dos.writeInt(123);
		dos.writeDouble(5.6);
		// 한글로 쓰기
		dos.writeUTF("buffered 데이터");
		//통로 닫기
		dos.close();
		
		//			자바에서 처리되는 데이터 형태라 이런식으로 나옴
		// txt >>   {@ffffff buffered 데이터
		
	}
}


ReaderIn

package ch03_reader;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ReaderIn {
	public static void main(String[] args) throws IOException {
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
		if (path.exists() == false) {
			path.mkdir();
		}

		// 폴더 위치, 파일명을 가지는 객체 생성
		File mf = new File(path, "reader.txt");

		// 경로에 파일이 없으면 생성
		// 예외전가를 시켜야함
		if (mf.createNewFile()) { // 예외뜨면 throws 해주기
			System.out.println(mf.getName() + " 파일 생성");
		} else {
			System.out.println(mf.getName() + " 중복 파일");
		}

		// 데이터 전송 통로 생성
		FileInputStream fis = new FileInputStream(mf);
		// 데이터 타입별로 전송 / 버퍼로 처리
		BufferedInputStream bis = new BufferedInputStream(fis);
		// 타입별 변환
		DataInputStream dis = new DataInputStream(bis);
		// 단점 : 데이터 타입에 맞는 메소드를 사용해야 함
		int ia = dis.readInt();
		double dd = dis.readDouble();
		String sd = dis.readUTF();
		
		System.out.println(ia);
		System.out.println(dd);
		System.out.println(sd);
		// 통로 닫기
		dis.close();

	}
}

reader.txt 중복 파일
123
5.6
buffered 데이터


ch04_text


TextOut

package ch04_text;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class TextOut {
	public static void main(String[] args) throws IOException {
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
		if (path.exists() == false) {
			path.mkdir();
		}

		// 폴더 위치, 파일명을 가지는 객체 생성
		File mf = new File(path, "sentence.txt");

		// 경로에 파일이 없으면 생성
		// 예외전가를 시켜야함
		if (mf.createNewFile()) { // 예외뜨면 throws 해주기
			System.out.println(mf.getName() + " 파일 생성");
		} else {
			System.out.println(mf.getName() + " 중복 파일");
		}
		
		// 데이터 전송 통로 생성
		FileWriter fw = new FileWriter(mf);
		// 한 번에 많은 데이터를 처리하기 위한 buffer 생성
		BufferedWriter bw = new BufferedWriter(fw);
		// 기록 시 문자열로 드로우 처리 해주는 printwriter
		PrintWriter pw = null;
		try {
			pw = new PrintWriter(bw);
			pw.println("문자열 처리를 편리하게 할 수 있음 ㅇㅋ?");
			pw.println("완료");
			
		} catch( Exception e ) {
			e.printStackTrace();
		} finally {
			pw.close();
		}
		
	}
}


TextIn

package ch04_text;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class TextIn {
	public static void main(String[] args) throws IOException {
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
		if (path.exists() == false) {
			path.mkdir();
		}

		// 폴더 위치, 파일명을 가지는 객체 생성
		File mf = new File(path, "sentence.txt");

		// 경로에 파일이 없으면 생성
		// 예외전가를 시켜야함
		if (mf.createNewFile()) { // 예외뜨면 throws 해주기
			System.out.println(mf.getName() + " 파일 생성");
		} else {
			System.out.println(mf.getName() + " 중복 파일");
		}

		// 데이터 전송 통로 생성
		FileReader fr = new FileReader(mf);
		// 한 번에 많은 데이터를 처리하기 위한 buffer 생성
		BufferedReader br = new BufferedReader(fr);
		// 기록 시 문자열로 드로우 처리 해주는 printReader
		
		try {
			// 한 줄이 아닐 수 있기 때문에 while문 사용
			while(true) {
				String rd = br.readLine();
				// 더이상 읽을 문자열이 없음 null값 반환
				if(rd ==null) break;
				System.out.println(rd);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			br.close();
		}
	}
}


ch05_copy


BinaryCopy

package ch05_copy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BinaryCopy {
	public static void main(String[] args) throws IOException {
		
		
		// 원래의 내용을 가진 놈 
		File original = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest\\sentence.txt");
		// 복사 해서 저장할 내용을 가질 객체 생성
		File duplicate = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\CopyTest\\copy.txt");
		
		FileInputStream fis = null;
		FileOutputStream fos = null;		
		try {
			fis = new FileInputStream(original);
			fos = new FileOutputStream(duplicate);
			int data = 0;
			while((data = fis.read()) != -1) {
				fos.write((byte)data);
			}
			System.out.println(duplicate.getPath() + " 복사 완료");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			// finally 실행코드도 try catch 가능
			try {
				fis.close();
				fos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}


ch06_Object


Unit implements Serializable

package ch06_Object;
import java.io.Serializable;
/*
 * 직렬화
 * - 객체 정보를 모아서 바이트 형태로 변환하는 것
 * 
 */

// 직렬화 자격을 획득하기 위해 'java.io.Serializable' 을 상속
public class Unit implements Serializable{
	// 클래스에게 부여하게 되는 고유 넘버 >> 사용자가 강제 지정 가능
	// serialVersionUID
	// - 같은 class 인지 확인하는 직렬화 식별자
	private static final long serialVersionUID =1L;
	private String id;
	private int lv;
	public Unit(String id, int lv) {
		this.id = id;
		this.lv = lv;
	}
	@Override
	public String toString() {
		return "ID : " + id + " - LV : " + lv;
	}
	
	
}

ObjectOut

package ch06_Object;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectOut {
	public static void main(String[] args) throws IOException {
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\Test");
		if (path.exists() == false) {
			path.mkdir();
		}

		// 폴더 위치, 파일명을 가지는 객체 생성
		File mf = new File(path, "unit.txt");

		// 경로에 파일이 없으면 생성
		// 예외전가를 시켜야함
		if (mf.createNewFile()) { // 예외뜨면 throws 해주기
			System.out.println(mf.getName() + " 파일 생성");
		} else {
			System.out.println(mf.getName() + " 중복 파일");
		}
		
		FileOutputStream fos = new FileOutputStream(mf);
		BufferedOutputStream bos = new BufferedOutputStream(fos); 
		ObjectOutputStream oos = null;
		
		Unit unit = new Unit("u001", 10);
		
		try {
			oos = new ObjectOutputStream(bos);
			
			oos.writeObject(unit);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(oos != null) oos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
}


ObjectIn

package ch06_Object;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectIn {
	public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException {

		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\Test");
		File mf = new File(path, "unit.txt");
		
		FileInputStream fis = new FileInputStream(mf);
		BufferedInputStream bis = new BufferedInputStream(fis);
		ObjectInputStream ois = null;
		
		try {
			ois = new ObjectInputStream(bis);
			
			Unit unit = (Unit)ois.readObject();
			System.out.println(unit);
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(ois != null) ois.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

ID : u001 - LV : 10


ch07_fileQuiz


Member implements Serializable

package ch07_fileQuiz;

import java.io.Serializable;

public class Member implements Serializable{
	
	private static final long serialVersionUID = 1L;
	private String name;
	private String phone;

	public Member(String name, String phone) {
		this.name = name;
		this.phone = phone;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "이름 : " + name + " - 전화번호 : " + phone;
	}
	
	
}

MemberManager

package ch07_fileQuiz;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;

import ch06_Object.Unit;

/*
 * - 전화번호 목록 파일로 부터 데이터 가져오기 
 * - ArrayList 에 저장해서 확인, 수정, 추가 기능
 */

// 해당 파일을 가져와서 배열에 담기 
public class MemberManager {

	private Scanner scanner = new Scanner(System.in);
	private ArrayList<Member> list;
	private File record;

	public MemberManager() throws IOException {
		list = new ArrayList<>();
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\MemberData");
		record = new File(path, "memberRecord.txt");
		if (record.createNewFile()) {
			System.out.println(record.getName() + " 파일 생성");
		}
	} // MemberManager()

	// 회원 추가
	public void insert() {
		System.out.println("--- 회 원   추 가 ---");
		System.out.print("이름 입력 > ");
		String name = scanner.next();
		Member man = findName(name);
		if (man != null) {
			System.out.println("사용중인 이름 입니다~");
			return;
		}
		System.out.print("전화번호 입력 > ");
		String phone = scanner.next();
		list.add(new Member(name, phone));
		System.out.println(name + "님이 추가 되었습니다..");
		save();
	} // insert()

	// 회원 검색
	public Member findName(String search) {
		for (Member man : list) {
			if (man.getName().equals(search))
				return man;
		}
		return null;
	} // fineName()

	// 회원 삭제 : 이름으로 삭제
	public void delete() {
		System.out.println("--- 번호 삭제 ---");
		System.out.print("이름 입력 > ");
		String dname = scanner.next();
		Member man = findName(dname);
		if(man == null) {
			System.out.println("이름을 찾을 수 없음 ");
			return;
		}
		System.out.println(dname + " 찾음 디져따");
		list.remove(man);
		System.out.println(dname + " 이놈 삭제");
 		save();
	} // delete()

	// 회원 목록
	public void view() {
		System.out.println("--- 회 원   목 록 ---");
		for(Member man : list) {
			System.out.println(man);
		}
		System.out.println("회원수 : " + list.size());
	} // view()

	// #번호수정
	public void cph(Member man) {
		System.out.print("수정 할 번호 입력 > ");
		String cphone = scanner.next();
		man.setPhone(cphone);
	}
	
	// 회원 정보 수정
	public void modify() {
		System.out.println("--- 정보 수정 ---");
		System.out.print("이름 입력 > ");
		String mname = scanner.next();
		Member man = findName(mname);
		if(man ==null) {
			System.out.println(mname + " 이놈 없음");
		} else {
			System.out.print("1. 이름 수정\n"
					+ "2. 번호 수정\n"
					+ ">>");
			int select = scanner.nextInt();
			switch(select) {
			case 1:
				System.out.print("수정 할 이름 입력 > ");
				String cname = scanner.next();
				man.setName(cname);
				System.out.println("번호도 수정하시겠습니까?");
				System.out.println("1. yes  2. no\n"
						+ ">>");
				select = scanner.nextInt();
				switch(select) {
				case 1:
					cph(man);
					break;
				case 2:
					return;
				}
				break;
			case 2:
				cph(man);
				break;
			default :
				System.out.println("입력 오류");
			}
			save();
		}
	} // modify()

	// 회원 정보 확인
	public void confirm() {
		System.out.println("--- 정보 확인 ---");
		System.out.print("검색할 이름 > ");
		String cname = scanner.next();
		Member man = findName(cname);
		if(man ==null) {
			System.out.println(cname + " 임마 없음");
			return;
		}
		System.out.println(man);
	} // confirm()

	// list 의 데이터를 파일로 저장
	public void save() {

		FileOutputStream fos = null;
		BufferedOutputStream bos = null;
		ObjectOutputStream oos = null;

		try {

			fos = new FileOutputStream(record);
			bos = new BufferedOutputStream(fos);
			oos = new ObjectOutputStream(bos);

			for (Member man : list) {
				oos.writeObject(man);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (oos != null)
					oos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		System.out.println(record.getName() + " 저장 완료");

	} // save()

	// 파일의 데이터를 가져와서 list 에 저장
	public void load() {
		
		if(record.length() ==0) return;
		if(list != null) list.clear();
		
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		ObjectInputStream ois = null;
		try {

			fis = new FileInputStream(record);
			bis = new BufferedInputStream(fis);
			ois = new ObjectInputStream(bis);

			while(true){
				Member man = (Member)ois.readObject();
				// readObject() 메소드가 읽을 데이터가 없으면 EOFException 발생
				list.add(man);
			}
		} catch (EOFException e) {
			try {
				if(ois!= null) ois.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		} catch(Exception e) {
			
		}
		System.out.println(record.getName() + " 로드 성공");
	} // load()

	// 종료
	public void end() {
		System.out.println("- Program end -");
		System.exit(0);
	}

}

MemberMain

package ch07_fileQuiz;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;

import ch06_Object.Unit;

public class MemberMain {
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		Scanner sc = new Scanner(System.in);
		MemberManager manager = new MemberManager();
//		private File path; 
		while (true) {
			System.out.print("1. 추가 \n" + "2. 삭제 \n" + "3. 목록 \n" + "4. 수정 \n" + "5. 확인 \n" + "6. 저장\n" + "7. 불러오기 \n"
					+ "0. 종료\n" + ">> ");

			int select = sc.nextInt();
			switch (select) {
			case 1: // 추가
				manager.insert();
				break;
			case 2: // 삭제
				manager.delete();
				break;
			case 3: // 목록
				manager.view();
				break;
			case 4: // 수정
				manager.modify();
				break;
			case 5: // 확인
				manager.confirm();
				break;
			case 6: // 저장
				manager.save();
				break;
			case 7: // 불러오기 : 파일에 저장된 목록
				manager.load();
				break;
			case 0: // 종료
				manager.end();
				break;
			default:
				System.out.println("입력 오류");
			}
			System.out.println();
		} // while

	}
}

ch07_fileQuizT


MemberManager

package ch07_fileQuizT;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;

/*
 * - 전화번호 목록 파일로 부터 데이터 가져와서 ArrayList 에 저장해서 확인, 수정, 추가 가능
 */

public class MemberManager {

	private Scanner scanner = new Scanner(System.in);
	private ArrayList<Member> list;
	private File record;
	
	public MemberManager() throws IOException {
		list = new ArrayList<>();
		File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\MemberDataT");
		record = new File(path, "memberRecordT.txt");
		if(record.createNewFile()) {
			System.out.println(record.getName() + " 파일 생성");
		}
		load();
	} // MemberManager()
	
	// 회원 추가
	public void insert() {
		System.out.println("--- 회 원   추 가 ---");
		System.out.print("이름 입력 > ");
		String name = scanner.next();
		Member man = findName(name);
		if(man != null) {
			System.out.println("사용중인 이름 입니다~");
			return;
		}
		System.out.print("전화번호 입력 > ");
		String phone = scanner.next();
		list.add(new Member(name, phone));
		System.out.println(name + "님이 추가 되었습니다..");
		save();
	} // insert()
	
	// 회원 검색
	public Member findName(String search) {
		for(Member man : list) {
			if(man.getName().equals(search))
				return man;
		}
		return null;
	} // fineName()
	
	// 회원 삭제 : 이름으로 삭제
	public void delete() {
		System.out.println("--- 회 원   삭 제 ---");
		System.out.print("삭제 이름 입력 > ");
		String name = scanner.next();
		Member man = findName(name);
		if(man == null) {
			System.out.println("검색 실패~");
			return;
		}
		list.remove(man);
		System.out.println(name + " 삭제");
		save();
	} // delete()
	
	// 회원 목록
	public void view() {
		System.out.println("--- 회 원   목 록 ---");
		for(Member man : list) {
			System.out.println(man);
		}
		System.out.println("회원수 : " + list.size());
	} // view()
	
	// 회원 정보 수정
	public void modify() {
		System.out.println("--- 회 원   수 정 ---");
		System.out.print("수정 이름 입력 > ");
		String name = scanner.next();
		for(Member man : list) {
			if(man.getName().equals(name)) {
				System.out.println("현재 전화번호 : " + man.getPhone());
				System.out.print("변경 전화번호 입력 > ");
				String phone = scanner.next();
				man.setPhone(phone);
				System.out.println(name + " 님의 전화번호가 변경 되었습니다~");
				save();
				return;
			}
		}
		System.out.println("수정 실패~");
	} // modify()
	
	// 회원 정보 확인
	public void confirm() {
		System.out.println("--- 회원정보  확 인 ---");
		System.out.print("검색 이름 입력 > ");
		String name = scanner.next();
		Member man = findName(name);
		if(man != null) {
			System.out.println(man);
		} else {
			System.out.println("없는 회원 입니다..");
		}
	} // confirm()
	
	// list 의 데이터를 파일로 저장
	public void save() {
		
		FileOutputStream fos = null;
		BufferedOutputStream bos = null;
		ObjectOutputStream oos = null;
		
		try {
			
			fos = new FileOutputStream(record);
			bos = new BufferedOutputStream(fos);
			oos = new ObjectOutputStream(bos);
			
			for(Member man : list) {
				oos.writeObject(man);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(oos != null) oos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		System.out.println(record.getName() + " 저장 완료");
		
	} // save()
	
	// 파일의 데이터를 가져와서 list 에 저장
	public void load() {
		if(record.length() == 0) return; // 파일에 기록된 데이터가 없으면 종료
		
		if(list != null)
			list.clear();
		
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		ObjectInputStream ois = null;
		
		try {
			
			fis = new FileInputStream(record);
			bis = new BufferedInputStream(fis);
			ois = new ObjectInputStream(bis);
			
			while(true) {
				Member man = (Member)ois.readObject();
				// readObejct() 메서드가 읽어드릴 데이터가 없으면 EOFException 예외 발생
				list.add(man);
			}
			
		} catch (EOFException e) {
			try {
				if(ois != null) ois.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		} catch (Exception e) {
			
		}
		System.out.println(record.getName() + " 로드 성공");
		
	} // load()
	
	// 종료
	public void end() {
		System.out.println("- Program end -");
		System.exit(0);
	}
	
}

P16_nio


ch01_socket


JavaNetwork

< JavaNetwork >

# 프로토콜

  • 프로토콜은 다양한 네트워크 장치들이 서로 데이터를 교환할 수 있는 약속

# TCP

  • 연결 지향 프로토콜

# UDP

  • 비연결 지향 프로토콜

  • 보내놓고 신경안쓰고 지 할거함

  • 일단 보내면 끝

# IP

  • 인터넷에 연결된 모든 통신망과 그 통신망에 연결된 컴퓨터에 부여하는 고유의 식별 주소
  • 어떠한 PC를 찾아갈 때 사용

# DNS 서버

  • URL 을 IP주소로 변환하는 서버

# PORT

  • 통신하는 프로그램 간에 사용되는 연결 포트
    -> IP 주소는 네트워크 상의 컴퓨터 또는 시스템을 식별하는 주소
    -> 포트번호를 이용해서 통신할 응용프로그램을 식별

  • 기본 IP로 찾아가고

  • 실행되는 특정 프로그램을 찾는 것은 지정된 포트값으로 찾아감

# java.net package

  • 네트워크 프로그램을 작성하기 위한 class

ExsServer

package ch01_socket;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * # server, client
 * - server : client에게 네트워크를 통해서 서비스를 제공하는 시스템
 * - client : server와 대응되는 개념, 서비스를 사용하는 사용자
 * 
 * # Socket
 * - server 와 client 간에 통신을 할 수 있도록 해주는 연결 통로
 * - 소켓은 특정 IP 포트 번호와 결합
 * - 클라이언트는 Socket 을 생성, 
 * - 서버는 ServerSocket을 생성한 후 이를 사용해서 Socket을 생성
 *
 * # port
 * - 0 ~ 65535 까지 사용
 * ->  0 ~ 1023 	: well-know port
 *	1024 ~ 49151 	: 서버 소켓으로 사용
 * 49152 ~ 65535 	: 동적 포트
 * 
 * # port 확인
 * - cmd
 * - netstat -ano
 * TCP 중 127.0.0.1 인 놈이 있으면 활성화 되어 있는 것임
 * 
 * PID 값으로 해당 port를 강제로 종료 시킴
 * 
 * # port 죽이기
 * - taskkill /f /pid pid번호
 * 
 */
public class ExsServer {
	public static void main(String[] args) {
		// 서버
		// # 서버가 먼저 돌고있어야 클라이언트가 요청 가능
		ServerSocket listener = null;
		Socket socket = null;

		try {
			listener = new ServerSocket(10000); // 서버 소켓 생성
			System.out.println("- Server 준비 -");

			socket = listener.accept(); // 클라이언트로 부터 연결 요청 대기
			System.out.println("접속 정보 : " + socket.toString());
		} catch (Exception e) {
			System.out.println("서버 Error");
		} finally {
			try {
				if (socket != null)
					socket.close();
				if (listener != null)
					listener.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

ExClient

package ch01_socket;

import java.net.Socket;

public class ExClient {
	public static void main(String[] args) {
		// 클라이언트
		Socket socket = null;
		try {
			// cmd(관리자 권한으로 실행) -> ipconfig -> IPv4 : ~~
			// 192.168.12.223
			// localhost를 사용할 수 있음 > 문자로 이루어짐
			// -> 자동으로 내 pc의 IP 가져옴
			// 변경될거라면 localhost를 사용하는 것이 좋음
			// 이유 : IP가 바뀌어도 알아서 내 것을 가져옴

			socket = new Socket("localhost", 10000);
			// localhost
			// - 컴퓨터 네트워크에서 사용되는 루프백 호스트명, 자신의 컴퓨터를 의미

		} catch (Exception e) {
			System.out.println("클라이언트 Error");
		} finally {
			try {
				if (socket != null)
					socket.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}

}
profile
Fintech

0개의 댓글