자바

JAVA STEP 43. File 입출력

2023. 2. 27. 18:04
728x90

★ 파일 입출력

  • 텍스트 입출력
    • 메모장
    • 응용 프로그램 <-> 데이터 <-> 보조기억장치
  • 비텍스트 입출력
    • 그림판
    • 동영상 플레이어
    • 음악 플레이어

 

★ 저장 장치

  • 데이터 1,0 으로 저장
  • 데이터 자료형 존재(X) > 모든 것을 문자열로 저장 > 문자 코드로 저장
  • data.txt

 

★ 인코딩 (Encoding)

  •  문자 코드(응용 프로그램 데이터)를 부호화(1,0) 시키는 작업
  • 자바 프로그램("홍길동") > 텍스트파일(100100100010)

 

★ 디코딩 (Decoding)

  •  부호 데이터를 문자 코드로 변환하는 작업(복호화)
  • 텍스트파일(100100100010) > 자바 프로그램("홍길동")

 

★ 인코딩/디코딩 규칙

  • ANSI
    • - 영어(서유럽 문자, 숫자, 특수문자, 제어문자 등) : 1byte
    • - 한글(일본어, 한자 등) : 2byte 
  • UTF-8(거의 국제 표준) 자바, 오라클 > UTF-8
    • - 영어 : 1byte
    • - 한글 : 2byte
  • UTF-16
    • - 영어 : 2byte
    • - 한글 : 2byte

 

■ 예제 1) 파일 쓰기

  • 1. 덮어쓰기 모드 (기본) 
    • 기존 내용을 삭제하고 다시 파일을 생성 후 데이터를 작성한다.
    • 만약 파일이 있으면 > 파일을 다시 생성
    • 파일 없으면 > 파일을 새로 생성
  • 2. 이어쓰기 모드
    • 기존 내용을 유지하고, 이어서 데이터를 추가한다.
    • 파일 있으면 > 파일 그대로 사용 
    • 파일 없으면 > 파일을 새로 생성
  • 소스코드
  •  
try {
			//데이터를 저장할 파일을 참조
			File file = new File("/Users/kimdaehwan/Desktop/Quest/file/파일입출력예제/data2.txt");
			
			//저장할 파일의 스트림 객체 생성
			//- 빨대 꽂기
			//- 스트림 열기
			FileOutputStream stream = new FileOutputStream(file, true); //true 라고 넣으면 이어쓰기모드, false면 덮어쓰기 모
			
			//쓰기 > 문자 코드 값 (65='A')
//			stream.write(71);
//			stream.write(72);
//			stream.write(73);
			
//			stream.write('\r');
//			stream.write('\n');
//			
//			stream.write('J');
//			stream.write('A');
//			stream.write('V');
//			stream.write('A');
			
//			String txt = "Hello JAVA!!";
//			
//			for(int i=0; i<txt.length(); i++) {
//				
//				char c = txt.charAt(i);
//				stream.write(c);
//				
//			}
			
//			byte [] list = {'A', 'B', 'C'};
//			stream.write(list);
			
			String txt = "JAVA Programing";
			stream.write(txt.getBytes());
			
			//바이트 단위 쓰기(1byte 씩 저장)
			stream.write('가');
			stream.write('나');
			stream.write('다');
			
			//- 빨대 뽑기
			//- 스트림 닫기
			stream.close();
			
			System.out.println("완료");
		} catch (Exception e) {
			
			e.printStackTrace();
			
		}
		
		
	}

 

■ 예제 2) 파일 읽기

  • 읽기 스트림 객체
  •  
private static void m2() {
		
		// 파일 읽기
		//- 읽기 스트림 객체
		
		File file = new File("/Users/kimdaehwan/Desktop/Quest/file/파일입출력예제/data.txt");
		
		try {
			
			if (file.exists()) {
				
				FileInputStream stream = new FileInputStream(file);
				
//				int code = stream.read(); //문자 코드값 반환
//				System.out.println(code);
//				
//				code = stream.read();
//				System.out.println(code);
//				
//				code = stream.read();
//				System.out.println(code);
				
				//루프 암기!!
				int code = -1;
				
				while ((code = stream.read()) != -1) {
					System.out.print((char)code);
				}
				

				
				stream.close();
			
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	
		
	}

 

■ 예제 3) FileOutputStream > FileWriter

  • 소스코드
  •  
private static void m3() {
		
		//FileOutputStream > FileWriter
		try {
			
			//문자 단위 쓰기(2byte)
			FileWriter writer = new FileWriter("/Users/kimdaehwan/Desktop/Quest/file/파일입출력예제/data3.txt");
			
			writer.write("ABC");
			writer.write("홍길동");
			
			writer.close();
			
			System.out.println("완료");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

 

■ 예제 4) 메모장 콘솔 버전 > 쓰기

  • 소스코드
  •  
private static void m4() {
		
		//메모장 콘솔 버전 > 쓰기
		try {
			
			Scanner scan = new Scanner(System.in);
			
			System.out.print("저장할 파일명 : ");
			String fileName = scan.nextLine();
			
			FileWriter writer = new FileWriter("/Users/kimdaehwan/Desktop/Quest/file/파일입출력예제/" + fileName);
			
			boolean loop = true;
			
			while (loop) {
				
				System.out.print("입력: ");
				String line = scan.nextLine();
				
				if(line.equals("exit")) {//그만두기
					break;
				}
				
				writer.write(line); //한줄 입력 > 텍스트 파일 한줄 쓰기
				writer.write("\r\n");
			
			}
			
			//자원 해제 코드(Clean up code)
			scan.close();
			writer.close();
			
			System.out.println("쓰기 종료");
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

 

■ 예제 5) FileReader

  • 소스코드
  •  
private static void m5() {
		try {
			
			//FileWriter
			//FileReader
			
			FileReader reader = new FileReader("/Users/kimdaehwan/Desktop/Quest/file/파일입출력예제/data.txt");
			
//			int code = reader.read();
//			System.out.println(code);
			
			int code = -1;
			
			while((code = reader.read()) != -1) {
				System.out.print((char)code);
			}
			
			reader.close();
			
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

 

 

■ 예제 6) BufferedWriter

  • FileOutputStream > FileWriter(전용) > BufferedWriter(범용)
  • 소스코드
  •  
private static void m7() {
		
		//파일 쓰기
		try {
			
			BufferedWriter writer = new BufferedWriter(new FileWriter("/Users/kimdaehwan/Desktop/Quest/file/파일입출력예제/data4.txt"));
			
			writer.write("안녕하세요");
			writer.write("\r\n");
			writer.write("홍길동입니다.");
			writer.newLine();
			writer.write("반갑습니다.");
			
			writer.close();
			
			System.out.println("완료");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

 

■ 예제 7) BufferedReader

  • FileInputStream > FileReader(전용) > BufferedReader(범용)
  • 소스코드
  •  
private static void m8() {
		
		try {
			
			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
			
			BufferedReader reader2 = new BufferedReader(new FileReader("/Users/kimdaehwan/Desktop/Quest/file/파일입출력예제/data4.txt"));
			
			
//			String line = reader2.readLine();
//			System.out.println(line);
//			
//			line = reader2.readLine();
//			System.out.println(line);
//			
//			line = reader2.readLine();
//			System.out.println(line);
//			
//			line = reader2.readLine();
//			System.out.println(line);
			
			String line = null;
			
			while((line = reader2.readLine()) != null) {
				System.out.println(line);
			}
			
			System.out.println("완료");
			
			reader2.close();
			
			//FileWriter == BufferedWriter 
			//FileReader << BufferedReader
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

 

■ 예제 8) 더미 데이터 만들기

  • 소스코드
  •  
private static void m10() {
	      
	      //더미 데이터 만들기
	      String[] names = { "김", "이", "박", "최", "정", "현", "민", "유", "재", "신" };
	      
	      try {
	         
	         //. : 현재 프로그램이 있는 폴더
	         //자바 콘솔 프로그램 > 현재 위치 > 프로젝트 폴더
	         BufferedWriter writer 
	            = new BufferedWriter(new FileWriter(SCORE));
	         
	         for (int i=0; i<30; i++) {
	            
	            String name = "";
	            
	            name = names[(int)(Math.random() * names.length)]
	                  + names[(int)(Math.random() * names.length)]
	                  + names[(int)(Math.random() * names.length)];
	            
	            int kor = (int)(Math.random() * 61) + 40;
	            int eng = (int)(Math.random() * 61) + 40;
	            int math = (int)(Math.random() * 61) + 40;
	            
	            writer.write(String.format("%s,%d,%d,%d\r\n"
	                                 , name, kor, eng, math));
	            
	         }
	         
	         writer.close();
	         
	         System.out.println("더미 데이터 생성 완료!!!");
	         
	      } catch (Exception e) {
	         e.printStackTrace();
	      }
	      
	   }

 

■ 예제 9) 더미 데이터 읽기 + 출력 + 응용

  • 소스코드
  •  
private static void m11() {
		
		//더미 데이터 읽기 + 출력
		try {
			
			BufferedReader reader = new BufferedReader(new FileReader(SCORE));
			
			System.out.println("[이름]\t[국어]\t[영어\t[수학]\t[총점]\t[평균]");
		
			String line = null;
			
			while ((line = reader.readLine()) != null) {
				//System.out.println(line);
				
				String[] temp = line.split(",");
				
				int kor = Integer.parseInt(temp[1]);
				int eng = Integer.parseInt(temp[2]);
				int math = Integer.parseInt(temp[3]);
				int total = kor+eng+math;
				double avg = total/3.0;
				
				
				System.out.printf("%s\t%4d\t%4d\t%4d\t%4d\t%4.1f\n"
									, temp[0]
									, kor
									, eng
									, math
									, total
									, avg);
			}
		
		
		}catch (Exception e) {
			
		}
		
	}
728x90
저작자표시 비영리 변경금지 (새창열림)

'자바' 카테고리의 다른 글

JAVA STEP 45. LinkedList  (0) 2023.02.28
JAVA STEP 44. File 입출력 예제  (0) 2023.02.27
JAVA STEP 42. 재귀 메소드  (0) 2023.02.27
JAVA STEP 41. File/Directory 조작 예제  (0) 2023.02.24
JAVA STEP 40. File/Directory 조작  (0) 2023.02.24
'자바' 카테고리의 다른 글
  • JAVA STEP 45. LinkedList
  • JAVA STEP 44. File 입출력 예제
  • JAVA STEP 42. 재귀 메소드
  • JAVA STEP 41. File/Directory 조작 예제
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • 데이터베이스
  • it
  • React
  • 웹페이지
  • 알고리즘
  • java
  • 개발자
  • IT자격증공부
  • 앱개발자
  • ajax
  • 자바
  • html
  • 정보보안전문가
  • jsp
  • 코딩테스트
  • 웹개발자
  • DBA
  • jquery
  • 백엔드
  • css
  • 개발블로그
  • 백준
  • 정보처리기사필기
  • IT개발자
  • DB
  • JavaScript
  • 프론트엔드
  • 정보처리기사
  • IT자격증
  • 웹개발

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
JAVA STEP 43. File 입출력
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.