자바 IO

2023. 12. 14. 23:00Daily 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