자바 는 파일 입 출력 흐름 을 이용 하여 폴 더 안의 모든 파일 을 다른 폴 더 로 복사 합 니 다.
자바 로 다음 작업 완료:
한 폴 더 에 있 는 모든 파일 을 다른 폴 더 로 복사 합 니 다.예 를 들 어 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");
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.