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();
}
}
}
}
출발지 폴더, 임시 폴더, 목적지 폴더를 정해 파일을 옮기는 예제
폴더 내의 파일 중 폴더가 있으면 재귀 호출