ReaderTest.java
package com.kitri.io;
import java.io.*;
public class ReaderTest {
public static void main(String[] args) {
Reader in = null;
try { //~Reader : Character Stream (byte가 아닌 문자)
in = new InputStreamReader(System.in); //콘솔창에서 읽어올 때 : System.in
char c[] = new char[100];
System.out.println("입력 : ");
int x = in.read(c);
System.out.println("x === "+ x); //x==문자 수 +\r\n (원래 enter는 \r\n)
String str = new String(c,0,x-2);
//그냥 c 하면 입력한 문자+나머지 칸들 총 100칸 출력됨. 따라서 0~x-2까지만 출력하기
System.out.println(str);
int len = c.length;
for (int i = 0; i < len; i++) {
System.out.println(c[i]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
출력은 print(String s) 처럼 String을 출력하는 method 있다.
하지만 입력은 String 입력받는 method가 없다.
BufferedReader class에 readLine() method 있다.
FileReader
package com.kitri.io;
import java.io.*;
public class FileReaderTest {
public static void main(String[] args) {
//fileInputStream의 character 형태 FileReader ..??
//FileReader에는 method 없어서 상위 class의 inputStreamReader
FileReader fr = null;
FileWriter fw = null;
try {
File infile = new File("e:\\iotest\\hello.txt");
fr = new FileReader(infile);
long length = infile.length();
char c[] = new char[(int) length];
int x = fr.read(c); System.out.println(x + "characters read !!!");
String str = new String(c);
System.out.println(c);
File outfile = new File("e:\\iotest\\hello_copy2.txt");
fw = new FileWriter(outfile);
//Write class에는 write(String str) method가 있다.
fw.write(str); //여기까지만 하면 파일만 생성되고 아무것도 안됨. 닫질않아서
} catch (FileNotFoundException e) {
e.printStackTrace(); // 이건 왜쓰는거지?
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fw!=null)
fw.close();
if(fr!=null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
BufferedReader
package com.kitri.io;
import java.io.*;
public class BufferedReaderTest {
public static void main(String[] args) {
BufferedReader fin = null;
//입력은 문자열로 받아올 수 있는게 BufferedReader밖에 없음
FileWriter fw=null;
// 출력은 문제없음.FileWriter 써도 됨
//BufferedReader 에는 String값으로 Read 할 수 있다.
//따라서 byte나 char 값으로 read 하는거 잘 안씀
//BufferedReader 쓰려면 InputStream과 Reader,BufferedReader 순으로 해야함
// InputStream is = System.in;
// Reader r= new InputStreamReader(is);
// BufferedReader in = new BufferedReader(r);
try {
//위의 세줄을 한줄로 줄이면
//system에서 읽어오는것
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("읽을 파일 이름 : ");
String infile = in.readLine();
System.out.println("infile =="+infile);
//readline는 enter를 기준으로 enter전까지만 읽는다. 따라서 enter 포함 안됨
System.out.println("복사할 파일 이름 : ");
String outfile = in.readLine();
fw= new FileWriter(new File(outfile));
//file에서 읽어오는 것
fin = new BufferedReader(new InputStreamReader(new FileInputStream(new File(infile))));
//file 처음부터 끝까지 읽어와야하는데 readline은 엔터전까지만 읽어옴
//따라서 파일이 끝날때 까지 계속 한줄씩 읽어오도록 while문을 써야함.
String str = null;
while((str = fin.readLine())!=null) {
System.out.println(str);
fw.write(str+"\r\n");
//읽어오는것이 엔터 전까지만 읽어온다
//따라서 그대로 write하면 엔터 없이 쭉 한줄로 붙이게 된다.
//그러므로 꼭 \r\n을 붙여준다.
}
//src\\com\\kitri\\io\\FileTest.java 라고 치면
//현재 경로인 bin에서 쓴 경로로 들어가서 file 읽어옴
//e:\\iotest\\hello.txt 라고 치면
//쓴 경로의 hello.txt 파이 읽어옴
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fw!=null)
fw.close();
if(fin!=null)
fin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
[출처] 빡쏘끼룩
'IT > JAVA' 카테고리의 다른 글
[Java] Thread (0) | 2020.12.14 |
---|---|
[Java] I/O 3(입출력) (java.io) - NotePad 만들기 (0) | 2020.11.13 |
[Java] I/O (입출력) (java.io) - println, file (0) | 2020.10.24 |
[Java] Exception - Runtime Exception (ArithMeticException, IndexOutOfBoundsE, NumberFormatException) (0) | 2020.10.23 |
[Java] JCF(Java Collection Framework) - Collection / Map (0) | 2020.10.16 |