(복사할 파일 =>1.exe // 생성할 파일 =>copy(복사할 파일에서 정수 1씩 증가).exe)
예> copy2.exe, copy2.exe....
재귀메소드 사용
Thread, Scanner, File
FileInputStream : 파일을 1byte단위로 읽어오는 클래스
FileOutputStream: 파일을 1byte단위로 출력하는 클래스
//복사Thread
class CopyThread extends Thread{
@Override
public void run(){
}
}
//크기Thread
class SizeThread extends Thread{
@Override
public void run(){
}
}
//main 메소드.선택지 만들고 고르는 프로그램
public class Test{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("1.파일복사 2.파일크기구하기 3.종료");
int n = sc.nextInt();
switch(n){
//참조변수 없이 바로 객체생성해서 메소드를 불러올 수 있음
//단 참조변수가 없기때문에 딱 한번밖에 사용하지 못할때 사용한다.
case 1: new CopyThread().start(); break;
case 2: new SizeThread().start(); break;
case 3: System.exit(0); //프로그램 자체를 종료시킴
}
}
}
}
//복사Thread
class CopyThread extends Thread{
static int n = 1; //생성할 파일에 1씩 더해주기 위한 static변수
@Override
public void run(){
try{
FileInputStream fis = new FileInputStream("C:\\2207\\1.exe");
String copy = "copy"+(n++)+".exe"; //copy파일이름
FileOutputStream fos = new FileOutputStream("C:\\2207\\copy);
byte[]b = new byte[50];
while(true){
int n1 = fis.read(b);
if(n1==-1) break;
fos.write(b,0,n1);
}
fos.close();
fis.close();
System.out.println(copy+"복사본 파일생성 완료!");
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
//크기Thread, 재귀메소드 사용
class SizeThread extends Thread{
@Override
//run()메소드는 오버라이딩 메소드이기 때문에 재귀메소드로 만들어줄 수 없음
public void run(){
long size = getDirSize(new File("C:\\2207"));
System.out.println("디렉토리 크기: "+size+"bytes");
}
//재귀메소드. 디렉토리를 변수로..
public long getDirSize(File f){
//사이즈 변수 초기화
long size =0;
File[] list = f.listFiles(); //폴더내 파일 목록 배열
For(File f1:list){ //확장for문 for(참조변수:배열)
if(f1.isFile()){ //list에 있는 f1이 파일이면
size+=f1.length(); //해당 파일의 크기를 size에 더함
}else{ //파일이 아니면 인자를 f1으로 한 재귀메소드 호출하여 size에 더함
size+=getDirSize(f1);
}
}
return size; //for문이 다 돌면 최종 size를 리턴해준다.
}
}
public class Test{
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("1.파일복사 2.파일크기구하기 3.종료");
int n = sc.nextInt();
switch(n){
//참조변수 없이 바로 객체생성해서 메소드를 불러올 수 있음
//단 참조변수가 없기때문에 딱 한번밖에 사용하지 못할때 사용한다.
case 1: new CopyThread().start(); break;
case 2: new SizeThread().start(); break;
case 3: System.exit(0); //프로그램 자체를 종료시킴
}
}
}
}