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

+ Recent posts