수업

+29 라이브러리(IO) : 스트림, 직렬화(ObjectInputStream, ObjectOutputStream)

hs_developer 2022. 6. 14. 17:50

FileReader로 파일 읽기 -> 한글 안 깨짐

 

import java.io.*;
import java.util.*;
public class M1 {

	public static void main(String[] args) {
		
		try
		{
			FileReader fis = new FileReader("C:\\Users\\user\\eclipse-workspace\\6.14\\src\\com\\sist\\io\\M1.java");
			
			int i=0; // read() -> int
			
			while((i=fis.read())!=-1) // -1 -> 문장이 끝날 때까지
			{
				System.out.print((char)i);
			}
			fis.close(); // 형 변환 후 닫기
			
		}catch(Exception ex) {}
	}
}

 

 

 

파일 읽어오기 -> 파일(File)인지 폴더(Dir)인지 구분

import java.io.*;
public class M2 {

	public static void main(String[] args) {
		
		try
		{
			// 1. File 객체 생성
			File dir = new File("c:\\javaDev\\");
			
			// 2. javaDev에 있는 모든 폴더/파일 읽어 온다.
			File[] list = dir.listFiles();
			
			// 3. 출력
			for(File f:list)
			{
				// System.out.println(f.getName());
				
				// 파일인지 확인
				if(f.isFile())
				{
					System.out.println(f.getName() + "(file)");
				}
				else
				{
					System.out.println(f.getName() + "(DIR)");
				}
			}
			
			
		} catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}

 

 

파일 만들기, 폴더 만들기

// 파일 만들기, 폴더 생성하기
public class M3 {

	public static void main(String[] args) {
		
		try
		{
			// 1. 폴더 만들기
			File dir = new File("c:\\사원");
			
			// 2. 사원 폴더가 있는지 확인
			if(!dir.exists()) // 사원 폴더가 없으면 
			{
				dir.mkdir(); // 만들어라
				System.out.println("폴더 생성!!");
			}
			else
			{
				System.out.println("이미 존재하는 폴더입니다...");
			}
			
			// 3. 파일 만들기
			File file = new File("c:\\사원\\sawonData.txt");
			if(!file.exists()) // 존재 여부 항상 확인 해야 함
			{
				file.createNewFile();
				System.out.println("파일 만들기 완료!!");
			}
			else
			{
				System.out.println("이미 존재하는 파일입니다...");
			}
				
			
		} catch(Exception ex)
		{
			ex.printStackTrace();
		}
		
	}
}

 

 

 

파일 정보 읽기

수정 일: 1654158751798
수정 일: Thu Jun 02 17:32:31 KST 2022
수정 일: 2022년 06월 02일 05시 32분 31초
ㅡㅡㅡㅡ 기타 정보 ㅡㅡㅡㅡ
***파일 명: melon.txt
***파일 + 경로 명: c:\javaDev\melon.txt
경로 명: c:\javaDev
읽기 전용: true
쓰기 전용: true
숨김 파일: false
절대 경로: c:\javaDev\melon.txt
정규 경로: C:\javaDev\melon.txt
File.pathSeparator - ;
파일 크기: 5809
5KB
import java.util.*; // Date
import java.text.*; // SimpleDateFormat
import java.io.*; // lastModified : 수정 날짜
public class M4 {

	public static void main(String[] args) {
		
		try
		{
			File file = new File("c:\\javaDev\\melon.txt");
			
			System.out.println("수정 일: " + file.lastModified());
			
			// 데이터 변환
			long last = file.lastModified();
			Date date = new Date(last);
			System.out.println("수정 일: " + date);
			
			// 날짜 변환
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
			System.out.println("수정 일: " + sdf.format(date));
			
			System.out.println("ㅡㅡㅡㅡ 기타 정보 ㅡㅡㅡㅡ");
			System.out.println("***파일 명: " + file.getName());
			System.out.println("***파일 + 경로 명: " + file.getPath());
			System.out.println("경로 명: " + file.getParent());
			System.out.println("읽기 전용: " + file.canRead());
			System.out.println("쓰기 전용: " + file.canWrite());
			System.out.println("숨김 파일: " + file.isHidden());
			System.out.println("절대 경로: " + file.getAbsolutePath());
			System.out.println("정규 경로: " + file.getCanonicalPath());
			System.out.println("File.pathSeparator - " + File.pathSeparator);
			System.out.println("파일 크기: " + file.length());
			
			long size = file.length();
			String s = "";
			if(size/1024 > 0)
				s = (size/1024) + "KB";
			else
				s = size + "Bytes"; // 작은 파일은 바이트로 출력
			System.out.println(s);
			
		} catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}

 

 

 

파일 복사

import java.io.*;
public class M5 {

	public static void main(String[] args) {
		
		try
		{
			// 파일 읽기 -> FileInputStream
			// 파일 쓰기 -> FileOutputStream
			// 파일 복사, 파일 다운로드
			FileInputStream fis = new FileInputStream("c:\\javaDev\\melon.txt"); // 이 파일을
			FileOutputStream fos = new FileOutputStream("c:\\사원\\melon.txt"); // 이 폴더에 복사
			// FileOutputStream -> 파일이 없는 경우 자동으로 생성
			
			int i=0;
			byte[] buffer = new byte[1024];
			
			while((i=fis.read(buffer, 0, 1024))!=-1) // 파일 끝까지 읽는다
			{
				fos.write(buffer, 0, i); // 파일 서버에 전송
			}
			
			fis.close();
			fos.close();
			System.out.println("파일 복사 완료!!");
					
		} catch(Exception ex) {}
	}
}

 

 

 

사원 입력 값 가져오기, 수정.. 

 

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Sawon {

	private int sabun;
	private String name;
	private String dept;
	private String loc;
	private String job;
	private String hiredate;
	private int pay;
	
}
import java.util.*;
import java.io.*;
public class SawonManager {
   private static ArrayList<Sawon> list=new ArrayList<Sawon>();
   // 초기화 
   static
   {
	   try
	   {
		   FileReader fr=new FileReader("c:\\사원\\sawonData.txt");
		   String data="";
		   int i=0;
		   while((i=fr.read())!=-1)
		   {
			   data+=(char)i;
		   }
		   fr.close();

		   if(!data.equals(""))// 에러방지 
		   {
		     String[] sawonData=data.split("\n");// 한줄씩 데이터 저장 
		     for(String sawon:sawonData)
		     {
		    	 StringTokenizer st=new StringTokenizer(sawon,"|");
		    	 Sawon sa=new Sawon();
		    	 sa.setSabun(Integer.parseInt(st.nextToken()));
		    	 sa.setName(st.nextToken());
		    	 sa.setJob(st.nextToken());
		    	 sa.setDept(st.nextToken());
		    	 sa.setLoc(st.nextToken());
		    	 sa.setHiredate(st.nextToken());
		    	 sa.setPay(Integer.parseInt(st.nextToken()));
		    	 
		    	 list.add(sa);
		     }
		   }
		   
	   }catch(Exception ex){}
   }
   // 기능 
   // 1. 목록 
   public void sawonList()
   {
	   for(Sawon sa:list)
	   {
		   System.out.println(sa.getSabun()+" "
				   +sa.getName()+" "
				   +sa.getJob()+" "
				   +sa.getDept()+" "
				   +sa.getLoc());
	   }
   }
   
   // 2. 사원추가 
   public void sawonInsert()
   {
	   Scanner scan=new Scanner(System.in);
	   System.out.print("이름 입력:");
	   String name=scan.next();
	   
	   System.out.print("직위 입력:");
	   String job=scan.next();
	   
	   System.out.print("부서 입력:");
	   String dept=scan.next();
	   
	   System.out.print("근무지 입력:");
	   String loc=scan.next();
	   
	   System.out.print("입사일 입력:");
	   String day=scan.next();
	   
	   System.out.print("연봉 입력:");
	   int pay=scan.nextInt();
	   
	   Sawon sa=new Sawon();
	   sa.setName(name);
	   sa.setJob(job);
	   sa.setDept(dept);
	   sa.setLoc(loc);
	   sa.setHiredate(day);
	   sa.setPay(pay);
	   
	   list.add(sa);
	   
	   fileSave();
   }
   // 3. 사원수정 
   public void sawonUpdate()
   {
	   Scanner scan = new Scanner(System.in);
	   sawonList();
	   System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
	   System.out.println("사번 입력: ");
	   int sabun = scan.nextInt();
	   
	   System.out.print("이름 입력:");
	   String name=scan.next();
	   
	   System.out.print("직위 입력:");
	   String job=scan.next();
	   
	   System.out.print("부서 입력:");
	   String dept=scan.next();
	   
	   System.out.print("근무지 입력:");
	   String loc=scan.next();
	   
	   System.out.print("입사일 입력:");
	   String day=scan.next();
	   
	   System.out.print("연봉 입력:");
	   int pay=scan.nextInt();
	   
	   Sawon sa=new Sawon();
	   sa.setSabun(sabunMake());
	   sa.setName(name);
	   sa.setJob(job);
	   sa.setDept(dept);
	   sa.setLoc(loc);
	   sa.setHiredate(day);
	   sa.setPay(pay);
	   sa.setSabun(sabun);
	   
	   int k=0;
	   for(Sawon s:list)
	   {
		   if(s.getSabun()==sa.getSabun())
		   {
			   list.set(k, sa);
			   break;
		   }
		   k++;
	   }
	   
	   fileSave();
   }
   
   // 4. 사원 상세보기 
   public void sawonDetail()
   {
	   Scanner sc = new Scanner(System.in);
	   sawonList();
	   System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
	   System.out.println("사번 입력: ");
	   int sabun = sc.nextInt();
	   
	   for(Sawon sa:list)
	   {
		   if(sa.getSabun()==sabun) // primary key
		   {
			   System.out.println("사번: " + sa.getSabun());
			   System.out.println("이름: " + sa.getName());
			   System.out.println("부서: " + sa.getDept());
			   System.out.println("근무지: " + sa.getLoc());
			   System.out.println("사번: " + sa.getJob());
			   System.out.println("입사일: " + sa.getHiredate());
			   System.out.println("연봉: " + sa.getPay());
			   break;
		   }
	   }
   }
   
   
   // 5. 사원삭제
   public void sawonDelete()
   {
   	Scanner sc = new Scanner(System.in);
   	for(Sawon sa :list)
   	{
   		System.out.println(sa.getSabun() + "." + sa.getSabun());
   	}
   	System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
   	System.out.println("삭제할 사번을 선택하세요.");
   	int sabun = sc.nextInt();
   	
   	for(Sawon sa:list)
   	{
   		if(sa.getSabun()==sabun)
   		{
   			list.remove(sa);
   			break;
   		}
   	}
   	
   	fileSave();
   }
   
   // 6. 메뉴 
   public int menu()
   {
	   System.out.println("===== 메뉴 =====");
	   System.out.println("1. 사원 목록 보기");
	   System.out.println("2. 사원 상세 보기");
	   System.out.println("3. 사원 추가");
	   System.out.println("4. 사원 수정");
	   System.out.println("5. 사원 삭제");
	   System.out.println("9. 종료");
	   System.out.println("===============");
	   Scanner scan=new Scanner(System.in);
	   System.out.print("메뉴 선택:");
	   return scan.nextInt();
   }
   // 7. 종료시 파일에 저장  
   public void fileSave()
   {
	   try
	   {
		   FileWriter fw=new FileWriter("c:\\사원\\sawonData.txt");
		   for(Sawon sa:list)
		   {
			   String s=sa.getSabun()+"|"
					   +sa.getName()+"|"
					   +sa.getJob()+"|"
					   +sa.getDept()+"|"
					   +sa.getLoc()+"|"
					   +sa.getHiredate()+"|"
					   +sa.getPay()+"\n";
			   fw.write(s);
		   }
		   fw.close();
	   }catch(Exception ex){}
   }
   // 8. 시퀀스 (사번을 자동 증가) 
   public int sabunMake()
   {
	   int sabun=0;
	   for(Sawon sa:list)
	   {
		   if(sa.getSabun()>sabun)
			   sabun=sa.getSabun();//sabun의 최대값
	   }
	   return sabun+1;
   }
}
import java.util.Scanner;

public class SawonMain {

	public static void main(String[] args) {
		
		SawonManager sm = new SawonManager();
		
		while(true)
		{
			int m = sm.menu();
			
			if(m==9)
			{
				System.out.println("프로그램 종료");
				sm.fileSave();
				break;
			}
			else if(m==1)
			{
				sm.sawonList();
			}
			else if(m==2)
			{
				sm.sawonDetail();
			}
						
			else if(m==3)
			{
				sm.sawonInsert();
			}
			else if(m==4)
			{
				sm.sawonUpdate();
			}
			else if(m==5)
			{
				sm.sawonDelete();
			}
		}
	}
}