복습11 - IO

2025. 2. 7. 11:09·Java

1. 파일 생성, 리스트 확인

package io;

//필수로 해당 코드 중 사용하는 라이브러리가 정상적으로 로드가 되었는지를 꼭!! 확인하시길 바랍니다.
import java.io.File;
import java.util.Arrays;
import java.util.Scanner;

//io 복습1
/*
I/O => try ~ catch 필수 
String : Reader, Writer
byte : InputStream, OutputStream
memory : Buffered => 단독으로 선언하지 않음 
*/
public class java_io1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		try {
			/*	//해당 코드중 중요사항 디렉토리 생성 후 파일 생성 
			System.out.println("해당 파일을 생성할 디렉토리 경로 및 파일명을 입력하세요 : ");
			String url = sc.nextLine();
			File f = new File(url);
			//여기서 없는 디렉토리쓰면 생성안됨 mkrie()사용
		 	f.mkdir();
			f.createNewFile();	//io 해당 경로에 파일 생성
			*/
			System.out.println("불러올 디렉토리 경로를 입력하세요 : ");
			String url = sc.nextLine();
			File f = new File(url);
			
			//list() : 문자 월시 배열, listFiles() : File 자료형 배열 
			String filename[] = f.list();	//해당 경로의 모든 파일 출력
			System.out.println("list() : "+Arrays.asList(filename));
			
			//listFiles() : File 원시배열, 파일명을 로드할 경우 .getName()
			File filename2[] = f.listFiles();
			System.out.println("listFiles() : "+Arrays.asList(filename2));
			
			System.out.println(filename2[0].getName());
			
		}catch (Exception e) {
			
		}finally {
			sc.close();
		}
	}
}

😊응용문제

해당 배열의 파일명이 해당 디렉토리에 모두 생성되도록 코드 작성
0.png, 1.png, 2.png, 2.png, 3.png, 4.png
ftp 디렉토리에 파일 생성
package io;
import java.io.File;
import java.util.Arrays;

public class java_io2 {
	public static void main(String[] args) {
		int fn[] = {0, 1, 2, 3, 4};
		String url = "/Users/nayeong/Documents/java_etc/ftp/";		
		try {
			//파일 생성 
			int i = 0;
			while(i<fn.length) {
				File f = new File(url+fn[i]+".png");
				f.createNewFile();			
				i++;
			}		
			//디렉토리 확인 
			File check = new File(url);
			System.out.println(Arrays.asList(check.list()));
			
			
		}catch (Exception e) {
			System.out.println("오류 발생");
		}finally {			
		}
	}
}

 

2. 파일 삭제 

package io;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

//파일 삭제
public class java_io3 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("삭제할 파일명을 입력하세요(속성명 포함) : ");
		String filename = sc.nextLine();	//한칸 띄울수도있으니 nextLine
		String url = "/Users/nayeong/Documents/java_etc/ftp/";
		File f = new File(url);	//디렉토리를 오픈
		try {
//			String files[] = f.list();
			//List 인터페이스 배열로 해당 디렉토리 전체 파일 목록을 저장시킴 
			List<String> fm  = new ArrayList<String>(Arrays.asList(f.list()));
			
			for(String n : fm) {
				if(n.equals(filename)) {
					File f2 =  new File(url + filename);
					f2.delete();		//delete() : 디렉토리 삭제, 파일 삭제 모두 가능함 
				}
			}			
		}catch (Exception e) {
			System.out.println("해당 경로가 확인되지 않습니다.");
		}finally {
			sc.close();
		}
	}
}

 

3.Reader, Writer

package io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.Scanner;

//Reader, Writer
public class java_io4 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		try {
			System.out.println("해당 파일 경로 전체를 입력하세요 : ");
			String msg = "난 정말 귀여워";
			String url = sc.nextLine();
			File f =  new File(url);
			
			//Writer : 부모클래스, 다양한 여러가지 형태의 클래스를 호출할 수 있음 
			//true : 지속적으로 데이터 누적, 기본(false) : 초기화 
			Writer w = new FileWriter(f, true);	//FileWriter : 저장 
			w.write(msg);
//			w.flush();	//ASCII는 안써도되는데 binary는 써야함 or 메모리 활용할때(BufferedWriter) 
			w.close();
			
			//Reader의 기본자료형 : char
			//Buffered 메모리이며 writer 사용시에는 flush() 사용 
			Reader r = new FileReader(f);	//FileReader : 불러오기
			BufferedReader br = new BufferedReader(r);
			//read() : 메모리에 할당된 크기 (단어별 ASCII 코드)
			//readLine() : 메모리에 할당된 문자열 (단어별 ASCII 코드를 String 변환)
			System.out.println(br.read());
			System.out.println(br.readLine());
			
			br.close();
			r.close();
		}catch (Exception e) {
			
		}finally {
			sc.close();
		}
	}
}

😊응용문제

ftp 디렉토리에 data.txt가 있습니다.

해달 내용을 배열로 변환하여 console로 출력 

package io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;

public class java_io5 {
	public static void main(String[] args) {
		java_io5box ib = new java_io5box();
		try {
			ib.txtToArray();
		}catch (Exception e) {
		}
	}
}

class java_io5box{
	public void txtToArray() throws Exception{
		String url = "/Users/nayeong/Documents/java_etc/ftp/data.txt";
		File f =  new File(url);
		Reader r = new FileReader(f);
		BufferedReader br = new BufferedReader(r);		
		String pd[] = br.readLine().split(",");
		
		int i = 0;
		while(i<pd.length) {
			System.out.println(pd[i]);
			i++;
		}	
		br.close();
		r.close();
	}
}

 

4. nio 파일 핸들링

package io;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;

//nio 사용
public class java_io6 {
	public static void main(String[] args) {
		String url = "/Users/nayeong/Documents/java_etc/ftp/123.txt";
		try {
			//Path : nio interface = File
			//얘는 new쓰는 얘가 아님
			Path ps = Paths.get(url);	//해당 디렉토리에 파일을 로드 
			List<String> data = Files.readAllLines(ps);
			System.out.println(data);
			
			byte[] data2 = Files.readAllBytes(ps);
			String str = new String(data2);		//byte를 String으로 바꾸는 법! 
			System.out.println(Arrays.asList(str));
            
			//파일 생성 
			Path mkps = Paths.get("/Users/nayeong/Documents/java_etc/ftp/aaa.txt");
			Files.createFile(mkps);
			
			//디렉토리 생성 
			Path mkdr = Paths.get("/Users/nayeong/Documents/java_etc/ftp/aaa");
			Files.createDirectory(mkdr);
			
		}catch (Exception e) {
			System.out.println("파일 경로 오류!!");
		}
	}
}
  • 동기(sync) : 순차적으로 데이터를 처리 - 단점 : 하나 처리하면 뒤에 애들이 기다려야함
    비동기(async) : 여러가지 처리 데이터를 각각 처리할 수 있는 기능  - 단점 : 오류나면 파악이 어려움 
    io : 순차적으로 처리 (동기) - 단방향  
    nio : 다중처리 방식 (비동기) - 양방향 
    나중에 배울 ajax(비동기) -> (조금 느려지지만 동기 방식도 사용할 수 있음) 

  • Files : new 안씀 => Files.메소드 //close도 없음  
    File 형태의 createfile, mkdir() => 객체 생성 및 인스턴스
    Files.copy() : 복사
    Files.createFile() : 파일 생성
    Files.createDirectory() : 디렉토리 생성
    Files.delete() : 파일 및 디렉토리 삭제 
    Files.list() : 디렉토리 안 파일 확인 
    Files.write() : 파일 쓰기 
    Files.readAllLines() : 파일 안 데이터를 전체 확인 
    Files.read() : 파일 읽기

5. Stream

파일 속 내용 읽기 

package io;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class java_io7 {
	public static void main(String[] args) {
		String url = "/Users/nayeong/Documents/java_etc/ftp/data.txt";
		try {
			/*
			핸들링 두가지 방식 
			1. Stream => File => InputStream 추가
			2. InputStream(문자경로)
			*/
			InputStream is = new FileInputStream(url);	//File f = new File(url); 해서 f를 여기에 넣어도 됨
			//1024 = 1KB
			byte data[] = new byte[is.available()];		//available() : 용량 확인 (내용이 아니고 파일 크기)
			is.read(data);		//read 전체를 모두 읽어들임 
//			is.read(data,5,10);	//read(byte,0,범위byte크기)
			String word = new String(data);
			System.out.println("word : " + word);
			
			List<byte[]> alldata = new ArrayList<>(Arrays.asList(data));
			
			//반복문 없이 해당 클래스 배열을 byte로 변환 후 출력 
			byte[] c = alldata.get(0);
			System.out.println("c : " + new String(c));
			
			//반복문을 이용하여 해당 클래스의 내용을 String으로 변환 후 출력	=> buffered쓰면 편함  
			for(byte[] f : alldata) {
				System.out.println("for-each : " + new String(f));
			}
			is.close();
		}catch (Exception e) {
		}finally {
		}
		new ex();
	}
}

//부가적인 설명 클래스 배열
class ex{
	public ex() {
		List<String> result = null;	//여기 List는 못들어감 엄마가 둘이됨 => ArrayList, LinkedList는 가능 
		result = this.aaa();
//		result = this.bbb();	//함수 안에서 자식인스턴스를 만들어 리턴하면 가능 
//		result = this.ddd();	//남의 자식이어서 안됨 
		
		Map<String, String> result2 = null;
		result2 = this.eee();	
		
		File abc = this.fff();
		
		InputStream is = this.ggg();	//InputStream는 인터페이스는 아니지만 추상클래스여서 이런게 가능함 (부모클래스, 자식클래스)
//		FileInputStream fis = this.hhh();	//부모가 뒤에가버림 -> 오류 
	}
	
	public ArrayList<String> aaa(){
		return null;
	}
	public List<String> bbb(){
		return null;
	}
	public LinkedList<String> ccc(){
		return null;
	}
	public Map<String, String> ddd(){
		return null;
	}
	public HashMap<String, String> eee(){
		return null;
	}
	public File fff(){
		return null;
	}
	public FileInputStream ggg(){
		return null;
	}
	public InputStream hhh(){
		return null;
	}
}
  • Stream (ASCII + binary) : byte
    ASCII도 쓰긴 하는데 binary에 쓰는 것이 바람직함
    binary : 2진법 (0, 1)
    Stream -> txt, pdf, jpeg, mp4, exe, bat
    Binary를 다루는 프로그램 : C, C++, Java, Python

    한글.jpg 한글.txt => 서버에 올리면 다깨짐 => 파일명을 cdn0.jpg 이런식으로 바꿔서 올라가게 처리해야함 

  • 1Mb 와 1MB의 차이 : 바이트는 대문자 비트는 소문자!! 주의 
  • 핸들링 두가지 방식  
    • 1. Stream => File => InputStream 추가
    • 2. InputStream(문자경로)

파일에 저장 및 복사 

package io;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Scanner;

public class java_io8 {
	public static void main(String[] args) {
		String url = "/Users/nayeong/Documents/java_etc/ftp/222.txt";
		Scanner sc = new Scanner(System.in);
		try {
			System.out.println("입력하실 단어를 적어주세요 : ");
			String msg = sc.nextLine();		//사용자가 입력한 값(String)
			OutputStream os = new FileOutputStream(url);	//byte 
			os.write(msg.getBytes());	//getBytes() : String을 byte로 변환 
			os.close();
		}catch (Exception e) {
			System.out.println("파일 경로가 잘못되었습니다.");
		}finally {
			sc.close();
		}
	}
}
  • 단독으로 Stream만 사용할 경우
    inputStream =>  byte[] => available() => read, readline
    OutputStream => getBytes() => write

package io;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

//읽는 방법 1.Stream + Buffered => byte
public class java_io9 {
	public static void main(String[] args) {
		String url = "/Users/nayeong/Documents/java_etc/ftp/222.txt";
		try {
			InputStream is = new FileInputStream(url);
			BufferedInputStream bis = new BufferedInputStream(is);
			byte[] data = new byte[bis.available()];	//byte 배열로 데이터를 이관 
//			int by = bis.read(data);	//int로 변환하는 경우 : 이미지, 동영상 등 binary파일 변환할때 사용 
			bis.read(data);	//ASCII인 경우 : 바로 read
			
			String word = new String(data,"UTF-8");	//ASCII의 경우 : new String(byte변수, 언어셋) 사용해서 byte를 String으로 변환  
			System.out.println(word);
			
			bis.close();
			is.close();
			
			new stream_reader().filedata();
		}catch (Exception e) {
			
		}finally {
			
		}

	}
}

//읽는 방법 2.InputStream + StreamReader + BufferedReader => 반복문
class stream_reader{
	String url = "/Users/nayeong/Documents/java_etc/ftp/222.txt";
	
	public void filedata() {
		try {
			//byte[] 사용하지 않고 읽는법
			//readLine():String, read():byte
			InputStream is = new FileInputStream(url);	//byte
			InputStreamReader isr = new InputStreamReader(is);	//String변환  
			BufferedReader br = new BufferedReader(isr);	//String 
			//반복문사용해서 출력해야함 
			System.out.println(br.readLine());
			
			br.close();
			isr.close();
			is.close();
		}catch (Exception e) {
			System.out.println("파일 경로가 올바르지 않습니다.");
		}finally {
			
		}
	}
}
  • 읽는 방법
    • 1.Stream + Buffered => byte
    • 2.InputStream + StreamReader + BufferedReader => 반복문
package io;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;


//OutputStream + Buffered(대용량)
//bynary는 무조건 byte이므로 String으로 변환할 필요가 전혀없음 
public class java_io10 {
	public static void main(String[] args) {
		//이미지 파일 복사 
		String url = "/Users/nayeong/Documents/java_etc/ftp/cdn_1.jpeg";
		try {
			InputStream is = new FileInputStream(url);	//일단 읽어야 복사 가능 (10MB이상부터는 상당히 느려짐)=>버퍼드인풋사용 
			byte files[] = new byte[is.available()];
			is.read(files);
			
			String copys = "/Users/nayeong/Documents/java_etc/ftp/cdn_copy_1.jpeg";
			OutputStream os = new FileOutputStream(copys);
//			os.write(files);	//Buffered 없이 copy
			
			BufferedOutputStream bos = new BufferedOutputStream(os);	//더 빠르게 저장하는 방식 => 영상같은거 처리에 좋음 
			bos.write(files);
			bos.flush();	//메모리를 비워두어야 해당 메모리를 지속적으로 사용 가능 
			bos.close();
			 
			os.close();
			is.close();
		}catch (Exception e) {
			System.out.println("원본 경로 및 사본 경로 주소가 잘못되었습니다.");
			System.out.println(e);
		}finally {
		}
	}
}

 

  • 이미지 파일 복사 OutputStream + Buffered(대용량)
저작자표시 비영리 변경금지 (새창열림)
'Java' 카테고리의 다른 글
  • Java - network (TCP 통신)
  • Java - network
  • Java - IO (응용)
  • Java - IO (binary)
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (25)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      Oracle
      io_dto
      java_io1~10
      net1
      net3
      ab1
      net4
      re_java10
      macbook pro m4
      notice_writer
      spring-boot
      datalist
      net2
      file25_t
      net5~10
      noticewriteok
      re2
      file24
      file25
      exam1_1~10
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    복습11 - IO
    상단으로

    티스토리툴바