공부/JAVA
[JAVA]콘솔 입출력, 파일 입출력 (+printf 예제)
도토리까꿍v
2024. 4. 20. 18:42
#핵심 요약
- 콘솔 입력 방식 4가지
- System.in.read()
- InputStreamReader reader = ...
- BufferedReader br = ..
- Scanner sc = ..
- 콘솔 출력 방식 3가지
- System.out.println()
- System.out.print()
- System.out.printf()
- 파일 입력 (파일로부터 내용을 입력받음)
- FileInputStream ...
- BufferedReader ...
- 파일 출력(파일로 내용을 출력)
- FileOutputStream ...
- FileWriter ...
- PrintWriter ...
#소스코드
콘솔 입출력 예제
// Java 프로그래밍 - 입출력_1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
public static void referInputStream() throws IOException {
// System.in
System.out.println("== System.in ==");
System.out.print("입력: ");
int a = System.in.read() - '0';
System.out.println("a = " + a);
System.in.read(new byte[System.in.available()]); //남아있는 데이터(엔터키)를 소진해서 없애주어야 한다.
// InputStreamReader
System.out.println("== InputStreamReader ==");
InputStreamReader reader = new InputStreamReader(System.in); //읽고자하는 만큼의 크기의 배열을 생성해서 입력받아야한다.
char[] c = new char[3];
System.out.print("입력: ");
reader.read(c);
System.out.println(c);
// BufferedReader
System.out.println("== BufferedReader ==");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //System.in와 InputStreamReader 를 합쳐놓은 느낌
System.out.print("입력: ");
String s1 = br.readLine();
System.out.println("s1 = " + s1);
}
public static void main(String[] args) throws IOException {
// 1. 입력
// 1-1. 다른 입력 방식 참고
// referInputStream();
// 1-2. Scanner -> 자주 사용하는 입력 방식
System.out.println("== Scanner ==");
System.out.print("입력1: ");
Scanner sc = new Scanner(System.in);
System.out.println(sc.next()); //데이터를 입력받아서 바로 출력
sc.nextLine(); //엔터키 소진을 위해 작성 (남아있는 데이터 제거)
System.out.print("입력2: ");
System.out.println(sc.nextInt()); //int값만 입력받을 수 있다.
sc.nextLine(); //엔터키 소진을 위해 작성 (남아있는 데이터 제거)
//가장 많이 사용하는 방법
System.out.print("입력3: ");
System.out.println(sc.nextLine());
// 참고) 정수, 문자열 변환 -> 자주 사용함
int num = Integer.parseInt("12345"); //문자열을 숫자로 변환
String str = Integer.toString(12345); //숫자를 문자열로 변환
// 2. 출력
System.out.println("== 출력 ==");
System.out.println("Hello");
System.out.println("World!");
System.out.print("Hello ");
System.out.print("World!");
System.out.printf("Hello ");
System.out.printf("World!");
System.out.println();
String s = "자바";
int number = 3;
System.out.println(s + "는 언어 선호도 " + number + "위 입니다."); //자바는 언어 선호도 3위 입니다.
System.out.printf("%s는 언어 선호도 %d위 입니다.\n", s, number); //자바는 언어 선호도 3위 입니다.
System.out.printf("%d\n", 10); //정수형, 10
System.out.printf("%o\n", 10); //8진수, 12
System.out.printf("%x\n", 10); //16진수, a
System.out.printf("%f\n", 5.2f); //실수형, 5.200000
System.out.printf("%c\n", 'A'); //문자
System.out.printf("%s\n", "안녕하세요"); //문자열
//공백과 함께 숫자 출력하기 %xd x자리 공간을 먼저 확보하고 숫자를 채워넣음
System.out.printf("%5d\n", 123); //오른쪽정렬
System.out.printf("%-5d\n", 123); //왼쪽정렬
System.out.printf("%05d\n", 123); //남은공간에 0으로 채우기
System.out.printf("%5d\n", 1234);
System.out.printf("%5d\n", 12345);
System.out.printf("%.2f\n", 1.126123f); //소수점 2번째 자리 (반올림)
}
}
파일 입출력 -1 : 기본예제
// Java 프로그래밍 - 입출력_2
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// 1. 파일 쓰기
// FileWriter
FileWriter fw = new FileWriter("./memo.txt"); // (./) : 현재폴더를 의미
String memo = "헤드 라인\n";
fw.write(memo); //작성해주기
memo = "1월 1일 날씨 맑음\n";
fw.write(memo); //작성해주기
fw.close();
// PrintWriter
PrintWriter pw = new PrintWriter("./memo.txt");
memo = "헤드 라인";
pw.println(memo);
memo = "1월 1일 날씨 맑음";
pw.println(memo);
pw.close();
//FileWriter 파일 이어쓰기 (파일이 이미 작성된 상태에서 이어쓰는 방법)
FileWriter fw2 = new FileWriter("./memo.txt", true);
memo = "1월 2일 날씨 완전 맑음\n";
fw2.write(memo);
fw2.close();
//PrintWriter 파일 이어쓰기 (파일이 이미 작성된 상태에서 이어쓰는 방법)
PrintWriter pw2 = new PrintWriter(new FileWriter("./memo.txt", true));
memo = "1월 3일 날씨 또 맑음!";
pw2.println(memo);
pw2.close();
// 2. 파일 입력
BufferedReader br = new BufferedReader(new FileReader("./memo.txt"));
while (true) {
String line = br.readLine();
if (line == null) {
break;
}
System.out.println(line);
}
br.close();
}
}
파일 입출력 - 2 : 연습문제
// Practice
// JamesArthurGosling.txt 파일을 읽은 후 원하는 단어 변경하여 새로 저장해보자.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Practice {
public static void main(String[] args) throws IOException {
String inputFile = "./JamesArthurGosling.txt";
String outputFile = "./JamesArthurGosling_edit.txt";
// 찾을 단어 / 변경 단어 입력 받기
System.out.print("찾을 단어: ");
Scanner sc = new Scanner(System.in);
String find = sc.nextLine();
System.out.print("변경 단어: ");
String to = sc.nextLine();
// 파일 읽기, 변경 및 저장
BufferedReader br = new BufferedReader(new FileReader(inputFile));
FileWriter fw = new FileWriter(outputFile);
while (true) {
String line = br.readLine(); //파일을 한줄씩 저장
if (line == null) {
break;
}
String newLine = line.replace(find, to); //문자열중 find를 찾아 to로 변경
fw.write(newLine + '\n'); //파일 쓰기 (한줄 씩 가져왔으므로 끝에 \n을 넣어준다.))
}
br.close();
fw.close();
}
}