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 |