자바 여러 파일 을 합 치 는 두 가지 방법
자바 에서 하위 파일 을 통합 하 는 것 이 가장 생각 나 는 것 은 버 프 레 드 스 트림 을 이용 하여 읽 기와 쓰 기 를 하 는 것 이다.
BufferedStream 을 이용 하여 여러 파일 을 통합 합 니 다.
public static boolean mergeFiles(String[] fpaths, String resultPath) {
if (fpaths == null || fpaths.length < 1 || TextUtils.isEmpty(resultPath)) {
return false;
}
if (fpaths.length == 1) {
return new File(fpaths[0]).renameTo(new File(resultPath));
}
File[] files = new File[fpaths.length];
for (int i = 0; i < fpaths.length; i ++) {
files[i] = new File(fpaths[i]);
if (TextUtils.isEmpty(fpaths[i]) || !files[i].exists() || !files[i].isFile()) {
return false;
}
}
File resultFile = new File(resultPath);
try {
int bufSize = 1024;
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(resultFile));
byte[] buffer = new byte[bufSize];
for (int i = 0; i < fpaths.length; i ++) {
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(files[i]));
int readcount;
while ((readcount = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, readcount);
}
inputStream.close();
}
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
for (int i = 0; i < fpaths.length; i ++) {
files[i].delete();
}
return true;
}
nio FileChannel 을 이용 하여 여러 파일 을 통합 합 니 다.BufferedStream 의 통합 작업 은 하위 파일 내용 을 반복 적 으로 읽 고 최종 파일 을 복사 하 는 과정 입 니 다.이 과정 은 파일 시스템 에서 데 이 터 를 메모리 로 읽 은 다음 파일 시스템 에 기록 하 는 것 으로 비효 율 적 입 니 다.
더 효율 적 인 합병 방식 은 자바 니 오 라 이브 러 리 의 FileChannel 류 의 transferTo 방법 을 이용 하여 합병 하 는 것 이다.이 방법 은 많은 운영 체제 가 파일 캐 시 에서 바이트 를 직접 전송 하 는 능력 을 이용 하여 전송 속 도 를 최적화 할 수 있다.
실현 방법:
public static boolean mergeFiles(String[] fpaths, String resultPath) {
if (fpaths == null || fpaths.length < 1 || TextUtils.isEmpty(resultPath)) {
return false;
}
if (fpaths.length == 1) {
return new File(fpaths[0]).renameTo(new File(resultPath));
}
File[] files = new File[fpaths.length];
for (int i = 0; i < fpaths.length; i ++) {
files[i] = new File(fpaths[i]);
if (TextUtils.isEmpty(fpaths[i]) || !files[i].exists() || !files[i].isFile()) {
return false;
}
}
File resultFile = new File(resultPath);
try {
FileChannel resultFileChannel = new FileOutputStream(resultFile, true).getChannel();
for (int i = 0; i < fpaths.length; i ++) {
FileChannel blk = new FileInputStream(files[i]).getChannel();
resultFileChannel.transferFrom(blk, resultFileChannel.size(), blk.size());
blk.close();
}
resultFileChannel.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
for (int i = 0; i < fpaths.length; i ++) {
files[i].delete();
}
return true;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.