자바

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 일지
Developer Story HouseIT계의 큰손이 되고 싶은 개린이의 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자격증
  • 알고리즘
  • 웹개발자
  • jsp
  • 데이터베이스
  • 정보보안전문가
  • IT개발자
  • jquery
  • ajax
  • 웹개발
  • DBA
  • 자바
  • java
  • 개발자
  • IT자격증공부
  • html
  • css
  • 개발블로그
  • 웹페이지
  • 정보처리기사
  • 프론트엔드
  • 백엔드
  • 코딩테스트
  • DB
  • React
  • 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 + /
⇧ + /

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