자바 는 파일 입 출력 흐름 을 이용 하여 폴 더 안의 모든 파일 을 다른 폴 더 로 복사 합 니 다.

5658 단어 Java카피폴 더
기본 목표
자바 로 다음 작업 완료:
한 폴 더 에 있 는 모든 파일 을 다른 폴 더 로 복사 합 니 다.예 를 들 어 F 디스크 에 a 와 b 두 개의 폴 더 가 있 습 니 다.

f:/a 안에 파일 이 한 무더기 있 습 니 다.자바 프로그램 을 실행 한 후에 모두 f:/b 로 복사 하고 이름 을 바 꿉 니 다.모든 파일 전에 rename 을 추가 합 니 다.의 접두사 입 니 다.폴 더 가 있 으 면 폴 더 의 이름 을 바 꾸 지 않 습 니 다.안에 있 는 파일 의 이름 을 바 꾸 고 모든 파일 전에 rename 을 추가 합 니 다.접두사:

2.제작 과정
1.우선 주 함 수 는 매우 간단 합 니 다.바로 위의 FileTest 류 중의 copy Folder 함 수 를 호출 한 것 입 니 다.

public class FileCopy { 
 public static void main(String args[]) { 
  new FileTest().copyFolder("f:/a", "f:/b"); 
 
 } 
} 
주의해 야 할 것 은 이것 은 과거 인 자 를 전달 하 는 경로 쓰기 입 니 다.자바 에 서 는 f:/a 는 문제 가 없습니다.f:\a 도 문제 가 없 지만\문자열 이 표 현 될 때 이동 해 야 하기 때문에 f:\\\\a 로 써 야 합 니 다.
2.전체 프로그램의 관건 은 이 FileTest 클래스 의 copy Folder 함수 입 니 다.이 클래스 에는 이 함수- -!그리고 프로그램 시작 에 자바.io.*를 도입 하 는 것 을 주의 하 십시오.입 출력 흐름 을 사 용 했 기 때문에

class FileTest { 
 public void copyFolder(String oldPath, String newPath) { 
  try { 
   //         ,        
   (new File(newPath)).mkdirs(); 
   //           file     ,        i,              
   File filelist = new File(oldPath); 
   String[] file = filelist.list(); 
   //   ,  temp            
   //              
   File temp = null; 
   for (int i = 0; i < file.length; i++) { 
    //  oldPath      /  \  ,   oldPath/        
    //     oldPath               
    //            f:/a  f:/a/ ? 
    if (oldPath.endsWith(File.separator)) { 
     temp = new File(oldPath + file[i]); 
    } else { 
     temp = new File(oldPath + File.separator + file[i]); 
    } 
     
    //         
    if (temp.isFile()) { 
     FileInputStream input = new FileInputStream(temp); 
     FileOutputStream output = new FileOutputStream(newPath 
       + "/" + "rename_" + (temp.getName()).toString()); 
     byte[] bufferarray = new byte[1024 * 64]; 
     int prereadlength; 
     while ((prereadlength = input.read(bufferarray)) != -1) { 
      output.write(bufferarray, 0, prereadlength); 
     } 
     output.flush(); 
     output.close(); 
     input.close(); 
    } 
    //          
    if (temp.isDirectory()) { 
     copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]); 
    } 
   } 
  } catch (Exception e) { 
   System.out.println("             "); 
  } 
 } 
} 
커서 가 파일 부분 을 만 나 는 것 은 이해 하기 어 려 울 수 있 습 니 다.사실은 이 렇 습 니 다.먼저 파일 의 입력 흐름 을 설정 하고 커서 가 만 나 는 파일 에서 입력 한 다음 에 new Path/rename 로 출력 을 지정 합 니 다.오래된 파일 의 파일 이름 은 이 파일 디 렉 터 리 입 니 다.그 다음 에 버퍼 배열 을 설정 합 니 다.파일 입력 흐름 은 읽 을 파일 에 대해 read 방법 을 호출 할 때마다 마지막 으로 읽 은 위치 로 버퍼 배열 bufferary 의 길이 내용 을 계속 읽 습 니 다.읽 은 내용 을 버퍼 배열 에 저장 하고 버퍼 배열 이전의 모든 내용 을 덮어 씁 니 다.그리고 파일 출력 흐름 은 파일 입력 흐름 이-1 을 만 날 때 까지 버퍼 배열 의 모든 내용 을 지정 한 위치 로 출력 합 니 다.
파일 입력 흐름 이 왜 이렇게 순서대로 읽 을 수 있 는 지 에 대해 서 는 매번 마지막 으로 읽 은 위치 로 계속 읽 습 니 다.그것 은 파일 을 읽 으 려 면 자바 가 봉 인 된 FileInputStream.read 방법 도 운영 체제 의 API 를 호출 하여 이 데 이 터 를 순서대로 읽 기 때 문 입 니 다.파일 데 이 터 를 읽 을 때 는 순서 가 있어 야 합 니 다.첫 번 째 바 이 트 를 먼저 읽 고 마지막 두 번 째 바 이 트 를 읽 는 것 은 불가능 합 니 다.반복 적 으로 읽 을 때 read 방법 은 읽 을 위치+를 사용 하기 때문에 매번 read 는 파일 끝 에 표 시 될 때 까지 뒤의 바이트 를 순서대로 읽 습 니 다.
커서 가 폴 더 를 만나면 같은 동작 을 다시 호출 하면 됩 니 다.이것 이 바로 교체 입 니 다.
3.따라서 전체 절 차 는 다음 과 같다.

import java.io.*; 
 
/** 
 * 
 * @param oldPath        
 * @param newPath         
 * 
 */ 
class FileTest { 
 public void copyFolder(String oldPath, String newPath) { 
  try { 
   //         ,        
   (new File(newPath)).mkdirs(); 
   //           file     ,        i,              
   File filelist = new File(oldPath); 
   String[] file = filelist.list(); 
   //   ,  temp            
   //              
   File temp = null; 
   for (int i = 0; i < file.length; i++) { 
    //  oldPath      /  \  ,   oldPath/        
    //     oldPath               
    //            f:/a  f:/a/ ? 
    if (oldPath.endsWith(File.separator)) { 
     temp = new File(oldPath + file[i]); 
    } else { 
     temp = new File(oldPath + File.separator + file[i]); 
    } 
     
    //         
    if (temp.isFile()) { 
     FileInputStream input = new FileInputStream(temp); 
     FileOutputStream output = new FileOutputStream(newPath 
       + "/" + "rename_" + (temp.getName()).toString()); 
     byte[] bufferarray = new byte[1024 * 64]; 
     int prereadlength; 
     while ((prereadlength = input.read(bufferarray)) != -1) { 
      output.write(bufferarray, 0, prereadlength); 
     } 
     output.flush(); 
     output.close(); 
     input.close(); 
    } 
    //          
    if (temp.isDirectory()) { 
     copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]); 
    } 
   } 
  } catch (Exception e) { 
   System.out.println("             "); 
  } 
 } 
} 
 
public class FileCopy { 
 public static void main(String args[]) { 
  new FileTest().copyFolder("f:/a", "f:/b"); 
 
 } 
} 

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기