import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class MyFile {
	static int fileCount = 0;
	static int dirCount = 0;
	
	public static void main(String[] args) throws IOException {
    //폴더 경로
		String src = "C:\\Users\\kks\\Documents\\0000\\abc";
		String dst = "C:\\Users\\kks\\Documents\\0000\\def";
		String tmpDir = "C:\\Users\\kks\\Documents\\0000\\temp";
				
		if(new File(src).isDirectory()&& new File(tmpDir).isDirectory()) {
			fileMove(src, tmpDir, false);
			fileMove(tmpDir, dst, true);
		}
		System.out.println("총 파일 : "+ fileCount);
		System.out.println("총 폴더 : "+ dirCount);
		
	}
	
	private static void fileMove(String src, String dst , boolean srcDelete) throws IOException {
		File srcFile = new File(src);
		FileInputStream in = null;
		BufferedInputStream bis = null;
		
		FileOutputStream out = null;
		BufferedOutputStream bos = null;
		
		File[] files = srcFile.listFiles();
		for(File file : files) {
			File dstFile = new File(dst+"\\"+file.getName());
			if(srcDelete) {
            // JVM 종료 시 삭제 
				file.deleteOnExit();
			}
			
			if(file.isDirectory()) {
				dirCount++;
				dstFile.mkdir();
				fileMove(file.getAbsolutePath(), dst+"\\"+file.getName(), srcDelete);
				
			}else {
				fileCount++;
				in = new FileInputStream(file);
				bis = new BufferedInputStream(in);
				
				out = new FileOutputStream(dstFile);
				bos = new BufferedOutputStream(out);
				
				int data = 0;
				while ((data = bis.read())!= -1 ) {
					bos.write(data);
				}
				bos.close();
				bis.close();
			}
		}
	}
}

 

출발지 폴더, 임시 폴더, 목적지 폴더를 정해 파일을 옮기는 예제

폴더 내의 파일 중 폴더가 있으면 재귀 호출

'개발 > 자바(JAVA)' 카테고리의 다른 글

객체 지향 - 2  (0) 2023.01.27
객체 지향 - 1  (0) 2023.01.25
변수의 타입  (0) 2022.07.07
변수  (0) 2022.07.03
자바란?  (0) 2022.07.02
public class Main{
    public static void main(String[] args){
        System.out.print("Hello World!");
    }
}

주의사항

클래스 Main일 것

'자료구조&알고리즘 > 입출력과 사칙연산' 카테고리의 다른 글

A-B  (0) 2022.06.15
A+B  (0) 2022.06.15
  (0) 2022.06.15
고양이  (0) 2022.06.15
We love kriii  (0) 2022.06.15

목적


기본적인 File 입출력을 사용해보면서 익히기

 

 

기본 사용


package file;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.file.FileSystems;

public class FileEx01 {
	public static void main(String[] args) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		
		try {
			fis = new FileInputStream("input.txt");
			System.out.println("운영체제별 디렉토리 구분자 ::: "+FileSystems.getDefault().getSeparator());
			fos = new FileOutputStream("src\\file/output.txt");
			int i;
			while((i=fis.read()) != -1 ) {
				fos.write(i);
			}
		}catch (Exception e) {
			System.out.println(e.getMessage());
		}finally {
			try {
				fis.close();
				fos.close();/*반드시 닫아줘야 합니다.*/
			} catch (Exception e2) {
				System.out.println(e2.getMessage());
			}
		}
	}
}

 

 

응용 사용


public class FileEx02 {
	public static void main(String[] args) {
		
		Long startTime = System.currentTimeMillis();
		
		try (BufferedInputStream bis= new BufferedInputStream(new FileInputStream("C:\\Users\\kks\\Downloads\\input\\원노트.zip"));
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\\\Users\\\\kks\\\\Downloads\\\\output\\\\원노트.zip"), 1024*4);
				) {
			int i;
			
			while((i=bis.read()) != -1 ) {
				bos.write(i);
				
			}
		}catch (Exception e) {
			System.out.println(e.getMessage());
		}finally {
			System.out.println("버퍼 사용 파일 입출력 완료 ::: " + ((System.currentTimeMillis()-startTime)/1000 ));
		}
	}
}

결과 = 버퍼 사용 파일 입출력 완료 ::: 35

파일 크기는 1.67GB

 

package file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.net.URL;

public class FileEx02 {
	public static void main(String[] args) {
		
		Long startTime = System.currentTimeMillis();
		
		try (BufferedInputStream bis= new BufferedInputStream(new URL("https://upload.wikimedia.org/wikipedia/commons/6/62/%EC%84%9C%EC%9A%B8%ED%8A%B9%EB%B3%84%EC%8B%9C_%EC%A0%84%EA%B2%BD_%EC%82%AC%EC%A7%84_%EC%82%AC%EB%B3%B8_-%EC%84%9C%EC%9A%B8%EC%84%B1%EA%B3%BD1.jpg").openStream());
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/pic.jpg"), 1024*4);
				) {
			int i;
			
			while((i=bis.read()) != -1 ) {
				bos.write(i);
				
			}
		}catch (Exception e) {
			System.out.println(e.getMessage());
		}finally {
			System.out.println("무료 사진 가져오기!");
		}
	}
}

데이터 소스가 로컬이건, 인터넷이건 결국은 입출력 구조를 따릅니다.

 

 

 

 

 

핵심 키워드

  • try - with - resource 
  • AutoCloseable, Closeable
  • 버퍼스트림(보조스트림)

 

 
 

닫기 가능

 

'개발 > 자바(JAVA)' 카테고리의 다른 글

파일 옮기기  (0) 2022.07.25
변수의 타입  (0) 2022.07.07
변수  (0) 2022.07.03
자바란?  (0) 2022.07.02
폴더, 파일 수 탐색  (0) 2022.05.27

+ Recent posts