2023. 12. 14. 23:00ㆍDaily Codig Reminder
1. 자바의 IO
소스/ 목적지/ 입력/ 출력
2. 표준 입출력
System.in
표준 입력으로서 키보드에서 데이터를 읽어 들일 때 사용한다.
import java.awt.im.InputContext;
import java.io.IOException;
import java.io.InputStream;
public class IOTest {
public static void main(String[] args) {
InputStream is = System.in;
try {
System.out.println("데이터 입력: ");
int n = is.read();//1byte
System.out.println((char)n);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
is.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.awt.im.InputContext;
import java.io.IOException;
import java.io.InputStream;
public class IOTest2 {
public static void main(String[] args) {
System.out.println("데이터 입력: ");
InputStream is = System.in;
try {
byte [] b = new byte [5];
int n = is.read(b); //읽은 개수:
for (byte c : b) {
System.out.println((char)c);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
is.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
한글 2byte 라 처리가 안됨.
import java.awt.im.InputContext;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class IOTest3_inputStreamReader {
public static void main(String[] args) {
System.out.println("데이터 입력: ");
InputStream is = System.in; //1byte
InputStreamReader reader = null; //char로 읽기 byte->char
try {
reader = new InputStreamReader(is);
int n = reader.read();
System.out.println((char)n);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
reader.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.awt.im.InputContext;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class IOTest4_BufferedReader {
public static void main(String[] args) {
System.out.println("데이터 입력: ");
InputStream is = System.in; //1byte
InputStreamReader reader = null; //char로 읽기 byte->char
BufferedReader buffer = null;
try {
//필터사용1: byte-> char
reader = new InputStreamReader(is);
//한줄(line)읽기
buffer = new BufferedReader(reader);
String mesg = buffer.readLine();
System.out.println(mesg);//표준출력
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
buffer.close();
reader.close();
is.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
4. 파일 처리
import java.io.File;
public class IOTest5 {
public static void main(String[] args) {
File f = new File("c:\\upload","IOTest.java");
System.out.println("파일이 존재? "+f.exists());
System.out.println("파일크기: "+f.length());
System.out.println("파일이름: "+f.getName());
System.out.println("파일경로: "+f.getPath());
System.out.println("파일절대경로: "+f.getAbsolutePath());
System.out.println("파일이냐?: "+f.isFile());
System.out.println("디렉토리이냐?: "+f.isDirectory());
System.out.println("실행가능하냐?: "+f.canExecute());
System.out.println("Write 가능?: "+f.canWrite());
System.out.println("Read 가능?: "+f.canRead());
}
}
import java.io.File;
public class IOTest6_File {
public static void main(String[] args) {
File f = new File ("C:\\");
String []s =f.list();
for (String string : s) {
System.out.println(string);
}
System.out.println("=========================");
File f2= new File ("C:\\bbb");
f2.mkdir();
f2.delete();
}
}
import java.net.URI;
import java.nio.file.Path;
import java.nio.file.Paths;
public class IOTest7_1_path {
public static void main(String[] args) {
Path path = Paths.get("c:\\upload\\IOTest.java");
System.out.println(path.getFileName());
System.out.println(path.getParent());
System.out.println(path.getRoot());
System.out.println(path.isAbsolute());
URI uri = path.toUri();
System.out.println("uri: "+uri);
Path xxx = Paths.get("IOTest2");
Path xxx2 = xxx.toAbsolutePath();
System.out.println(xxx2);
Path yyy = Paths.get("c:\\upload\\IOTest.java");
Path yyy2 = yyy.subpath(0, 2);
System.out.println(yyy2);
Path s1 = Paths.get("c:\\temp\\aaa");
Path s2 = Paths.get("test.txt");
Path s3 = s1.resolve(s2);
System.out.println(s3);
}
}
IOTest.java
c:\upload
c:\
true
uri: file:///c:/upload/IOTest.java
C:\eclipse\java_stu\workspace\12Day2_IO\IOTest2
upload\IOTest.java
c:\temp\aaa\test.txt
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class IOTest7_2_Files {
public static void main(String[] args) {
Path path = Paths.get("c:\\upload\\IOTest.java");
System.out.println(Files.exists(path));
System.out.println(Files.isReadable(path));
System.out.println(Files.isExecutable(path));
System.out.println(Files.isWritable(path));
Path newDir= Paths.get("c:\\temp\\ccc");
try {
Path xx = Files.createDirectories(newDir);
System.out.println(xx);
} catch (IOException e) {
e.printStackTrace();
}
}
}
true
true
true
true
c:\temp\ccc
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class IOTest7_3_Files2 {
public static void main(String[] args) {
Path newFile = Paths.get("c:\\temp\\xxx.txt");
Path xx2 = null;
//추가코드
// try {
// xx2 = Files.createFile(newFile);
// } catch (IOException e) {
// e.printStackTrace();
// }
//삭제코드
try {
System.out.println(Files.deleteIfExists(newFile));
} catch (IOException e) {
e.printStackTrace();
}
}
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class IOTest7_4_Files3 {
public static void main(String[] args) {
Path original = Paths.get("c:\\temp\\IOTest.java");
Path copy = Paths.get("c:\\temp\\IOTestCopy.java");
Path xx2 = null;
try {
Path yyy= Files.copy(original, copy, StandardCopyOption.REPLACE_EXISTING);
System.out.println(yyy);
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 파일 입출력
텍스트파일:
FileReader 및 FileWriter 같은 Node 계열 클래스를 사용하여 처리할 수 있으며
BufferedReader 및 PrintWriter 같은 Filter 계열 클래스를 데코레이션하여 구현
바이너리 파일:
FileInputStream 및 FileOutputStream을 사용
public class IOTest7_6_Read {
public static void main(String[] args) {
File f = new File ("C:\\upload\\IOTest.java");
BufferedReader buffer = null;
try {
FileReader reader = new FileReader(f);
buffer = new BufferedReader(reader);
String data = buffer.readLine();
while (data !=null) {
System.out.println(data);
data= buffer.readLine();
}
} catch (FileNotFoundException e) {
System.out.println("not found");
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally {
try {
buffer.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
파일용 불러오기
public class IOTest7_5_scanner {
public static void main(String[] args) {
File f = new File ("C:\\upload\\IOTest.java");
Scanner scanner =null;
try {
scanner = new Scanner (f);
String data = "";
while (scanner.hasNext()) {
data+= scanner.nextLine();
data+="\n"; // 코드 띄우기
} System.out.println(data);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
scanner.close();
}
}
}
파일 불러오기
public class IOTest8_Write {
public static void main(String[] args) {
File f = new File ("C:\\upload\\xyz.txt");
PrintWriter out = null;
try {
FileWriter writer = new FileWriter(f, true); //append
//true는 append false는 overwrite
//필터
out = new PrintWriter(writer);
out.print("capi");
out.print("bara");
//out.flush(); // 강제로close 시킨ㄴ 함
}catch(IOException e){
e.printStackTrace();
}finally {
out.close(); /// 반드시 close 하자
}
}
}
파일 만들고 안에 내용 쓰기 반복실행시 안에 카피바라가 계속 추가됨.
버퍼가 꽉 차야 데이터가 출력되어 버퍼가 비워지게 구현되어 있다. 필요시 버퍼를 명시적으로 비워주기 위해서는 flush() 메서드를 사용하거나 close() 해야 된다. 따라서 위의 실행에서는 버퍼에 데이터가 꽉 차지 않았기 때문에 출력이 안된 것이다. 따라서 close() 하면 버퍼가 비워져서 파일에 저장될 수 있다. |
public class IOTest8_Write2 {
public static void main(String[] args) {
File f = new File ("C:\\upload\\xyz.txt");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(f);//overwrite 기본
String mesg ="coffeebara";
byte[]b = mesg.getBytes();
fos.write(b);
}catch(IOException e){
e.printStackTrace();
}finally {
try{
fos.close(); /// 반드시 close 하자
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
콘솔 abc → in→ java code → out→ test.txt “abc”
input : system.in ⇒ InputStreamReader → BufferedReader.readLine();
public class IOTest8_Write3 {
public static void main(String[] args) {
File f = new File ("C:\\upload\\output.txt");//저장파일명
System.out.println("데이터를 입력하세요");
BufferedReader buffer = null;
PrintWriter out = null;
try {
buffer = new BufferedReader(new InputStreamReader(System.in));
FileWriter writer = new FileWriter(f, true);// 추가
//false overwrite 기본
out = new PrintWriter(writer);
out.print(buffer.readLine()+"\n");//콘솔 입력 된 내용의 파일에 저장(append)
}catch(Exception e){
e.printStackTrace();
}finally {
try{
buffer.close(); /// 반드시 close 하자
out.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class IOTest9_Input_Write {
public static void main(String[] args) {
File readFile = new File ("C:\\upload\\a.png");
File writeFile = new File ("C:\\upload\\b.png");
FileInputStream fis =null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(readFile);
fos = new FileOutputStream(writeFile);
int size = (int)readFile.length();
byte []b = new byte[size];
fis.read(b);
fos.write(b);
}catch(Exception e){
e.printStackTrace();
}finally {
try{
if(fis !=null)fis.close();
if(fos !=null)fos.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
a복사해서 b만들기
6. 객체 직렬화
객체 직렬화를 적용하면 메모리에 생성된 인스턴스 정보를 파일에 저장하거나 네트워크를 통해서 전달하는 방법으로 영속성을 유지할 수 있다. 객체 직렬화를 위해서 java.io.Serializable 인터페이스가 사용된다
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class IOTest10_Serial_Input1 {
public static void main(String[] args) {
ObjectInputStream ois = null;
try {
File f = new File ("c:\\upload", "serial.dat");
FileInputStream fis = new FileInputStream(f);
ois = new ObjectInputStream(fis);
Person p =(Person)ois.readObject();
System.out.println(p.getName()+"\t"+p.getAge());
}catch( IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}finally {
try{
ois.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class IOTest10_Serial_Out2 {
public static void main(String[] args) {
ObjectOutputStream oos =null;
try {
Person p = new Person ("홍길동",20);
File f = new File ("c:\\upload", "serial.dat");
FileOutputStream fos = new FileOutputStream(f);
oos = new ObjectOutputStream(fos);
oos.writeObject(p);
System.out.println("저장완료");
}catch( IOException e){
e.printStackTrace();
}finally {
try{
oos.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
'Daily Codig Reminder' 카테고리의 다른 글
JDBC 2 (0) | 2023.12.19 |
---|---|
JDBC (0) | 2023.12.14 |
리스트, 맵 (0) | 2023.12.12 |
예외처리 와 제네릭컬렉션 (1) | 2023.12.11 |
핵심클래스 (0) | 2023.12.09 |