자바 - 파일 입출력
<파일과 스트림>
01 스트림
-파일의 종류
텍스트 파일 / 바이너리 파일
문자로 읽을 수 있는 것과 없는 것
-스트림
파일을 읽고 쓸 때 데이터의 흐름을 스트림이라고 한다.
스트림 전용 클래스-> 스트림 오브젝트 생성
-문자 스트림
16비트(2바이트) 유니코드 문자 데이터를 다룸
-바이트 스트림
8비트(1바이트) 데이터를 다룸
-스트림 다루기
java.io 패키지
import java.io.*;
문자 스트림 : Reader, Writer
바이트 스트림 : InputStream, OutputStream
02 예외
-예외와 예외처리
예외 발생시 예외 클래스 오브젝트 생성(Exception클래스, 서브 클래스)
-예외처리 방법
try{
예외가 일어날 수 있는 처리
}catch (예외클래스 변수){
예외 발생시 처리
}finally{
항상 실행되는 처리
}
throws
void a(int b) throws 예외 클래스{
}
03 문자 읽기 (예- 텍스트 파일)
1)파일 열기
FileReader in = new FileReader("file1.txt"); //객체 생성
2)데이터 읽어오기
read()메소드 : 읽어온 문자를 int형으로 반환, 읽어올 데이터가 없으면 -1 반환
/*
파일 끝까지 읽기
int c;
String s = new String();
while((c=in.read())!=-1)
s=s+(char)c;
문자로 변환하여 String으로 연결
*/
3)파일을 닫는다
in.close();
--------------------------------------------------------------------------
import java.io.*;
public class test01 {
public static void main(String[] args) {
try {
FileReader in = new FileReader("ganada.txt");
int c;
String s=new String();
while((c=in.read())!=-1)
s=s+(char)c;
System.out.print(s);
in.close();
}catch(IOException ie) {
System.out.println("파일이 존재하지 않습니다.");
}catch(Exception e) {
System.out.println("파일을 지정하지 않았습니다.");
}
}
}
--------------------------------------------------------------------------
04 문자 쓰기
1)파일 열기
FileWriter out = new FileWriter("file2.txt");
2)데이터 쓰기(int, 문자, 문자열)
out.write("Hello\n");
3)파일을 닫는다
out.close();
--------------------------------------------------------------------------
import java.io.*;
public class test02 {
public static void main(String[] args) {
try {
FileWriter out=new FileWriter("match.txt");
int a=10,b=5;
out.write("덧셈 : ");
out.write(a+" + "+b+" = "+(a+b)+"\n");
out.write("뺄셈 : ");
out.write(a+" - "+b+" = "+(a-b)+"\n");
out.close();
}catch (Exception e) {
System.out.println(e);
}
}
}
-----------------------------------------------------------------
05 바이너리 파일 읽고 쓰기
읽기
1)파일 열기
FileInputStream in = new FileInputStream("file3.dat");
2)데이터 읽기
int c;
c = in.read();
read() 메소드 : 읽어 들인 1바이트의 데이터를 int형으로 반환, 읽어 들일 데이터가 없으면 -1 반환
3)파일 닫기
in.close();
쓰기
1)파일 열기
FileOutputStream out = new FileOutputStream("file4.dat");
2)데이터 쓰기
out.write(65);//int형 또는 byte형
3)파일 닫기
06문자 스트림으로 변환하기
FileInputStream ifile = new FileInputStream("file5.dat");
InputStreamReader in = new InputStreamReader(ifile);
//바이너리 입력을 문자 입력으로 변환, 인수: 바이너리 데이터를 읽어 들일 오브젝트
Output
FileOutputStream ofile = new FileOutputStream("file5.dat");
OutputStreamWriter out = new OutputStreamWriter(ofile);
//바이너리 출력을 문자 출력으로 변환 : 바이너리 데이터를 써 넣을 오브젝트를 인수로 받음
import java.io.*;
public class test03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String filename="file.dat";
FileOutputStream out = new FileOutputStream(filename);
FileInputStream file = new FileInputStream(filename);
InputStreamReader in = new InputStreamReader(file);
for(byte i = 1; i<=10;i++) {
out.write(i);
}//데이터 쓰기
int c;
while((c=in.read())!=-1) {//in(file=file.dat) 데이터 읽어서 문자로 변환 - 파일 끝까지
System.out.println(c+" ");
}
in.close();
out.close();
}catch (IOException e) {
System.out.println("파일이 존재하지 않습니다.");
}
}
}
-----------------------------------------------------------------
07 키보드 입력
- 키보드로 데이터 입력
int a=System.in.read();//문자 하나 입력
public static void main(String[] args) {
try {
int a=System.in.read();//A
System.out.println(a);//65
}catch (IOException e) {
;
}
}
-BufferedReader
행 단위로 데이터 읽기
인수: Reader 오브젝트
InputStreamReader a = new InputStreamReader(system.in);
BufferReader b = new BufferReader(a);
readLine()메소드 : 읽은 한 행을 String 문자열로 반환, 읽을 데이터 없을 경우 null 반환
String c = b.readLine();
-----------------------------------------------------------------
import java.io.*;
public class test05 {
public static void main(String args[]) {
try {
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
int a,b=7;
System.out.println("이름을 입력하세요");
String name=in.readLine();
System.out.println("숫자 맞추기 퀴즈! 0~9 사이의 숫자 입력");
String c = in.readLine();
a=Integer.parseInt(c);
while(a!=b) {
if((a==b-1)||(a==b+1))
System.out.println("아깝습니다~");
else if(a>b+1)
System.out.println("좀 더 작은 수입니다");
else if(a<b-1)
System.out.println("좀 더 큰 수 입니다.");
c=in.readLine();
a=Integer.parseInt(c);
}
System.out.println("정답 !! "+name+"님 축하합니다!!");
}catch (IOException ie) {
System.out.println("에러입니다!!");
}
}
}
-----------------------------------------------------------------
import java.io.*;
public class test01 {
public static void main(String[] args) {
BufferedReader in=null;
BufferedReader in2=null;
try {
in=new BufferedReader(new FileReader("mydic.txt"));
in2=new BufferedReader(new InputStreamReader(System.in));
System.out.println("영어 단어 입력 ");
String a=in2.readLine();
String eword,kword=null;
while((eword=in.readLine())!=null) {
if(a.equals(eword)) {
kword=in.readLine();
break;
}
}
if(kword==null)
System.out.println(a+"이라는 단어는 없습니다.");
else {
System.out.println(kword);
}
in.close();
in2.close();
}catch (FileNotFoundException e) {
System.out.println("파일이 존재하지 않습니다.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*mydic.txt
cat
고양이
dog
개
rabbit
토끼
apple
사과
*/
-----------------------------------------------------------------
import java.io.*;
public class test02 {
public static void main(String[] args) {
try {
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("파일 이름 입력 : ");
String filename=in.readLine();
FileWriter out= new FileWriter(filename);//(filename,true)로 하면 이어서 쓸 수 있다.
String data;
System.out.println("데이터를 입력해 주세요. (종료 : 0)");
while(!(data=in.readLine()).equals("0")) {
out.write(data+'\n');
}
System.out.println("종료되었습니다.");
out.close();
in.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
-----------------------------------------------------------------
정리
텍스트 파일 읽기 FileReader 쓰기 FileWriter
바이너리 파일 읽기 FileInputStream 쓰기 FileOutputStream
바이트->문자열 InputStreamReader(바이너리 인풋 객체)
문자열->바이트 OutputStreamReader(바이너리 아웃풋 객체)
키보드 읽기 BufferedReader(읽기 객체)
-----------------------------------------------------------------
이후 Scanner 클래스가 추가됨
...이어서