0
작업 :A
폴더에서 B
폴더로 선택한 파일을 복사하려고합니다. 두 폴더 모두 외부 저장소에 있습니다.파일을 폴더로 복사 할 수 없습니다.
문제 : 그러나 완벽하게 작동하지만 어느 시점에서 파일 복사가 중지됩니다. 예를 들어 500 개의 파일을 복사하려는 경우 110 개의 파일 만 복사합니다. 또한 비디오 파일을 복사 할 수 없다는 사실을 알았습니다. 이미지로만 작동합니다.
코드 :
내가 파일을 복사하는 데 사용하는 방법 :
private static void makeFileCopy(File source, File dest) throws IOException {
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(source);
os = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
}finally {
try {
if (is != null)
is.close();
if (os != null)
os.close();
}catch (IOException ex) {
ex.printStackTrace();
}
}
}
하나 더 :
public static void copyFileList(Context context, List<MediaFile> contentList, File mediaFolder) {
if (contentList != null) {
ContentValues values=new ContentValues();
for (int index=0;index<contentList.size();index++) {
MediaFile mediaFile=contentList.get(index);
File file = new File(mediaFolder, mediaFile.mediaFile().getName());
boolean isVideo=mediaFile.getType()== MediaFile.Type.VIDEO;
if (!file.exists()) {
try {
if (!file.createNewFile()) {
continue;
}
FileUtils.makeFileCopy(mediaFile.getRealFile().getAbsoluteFile(), file);
} catch (IOException ex) {
ex.printStackTrace();
continue;
}
if (isVideo) {
values.put(MediaStore.Video.VideoColumns.DATA, file.getAbsolutePath());
context.getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
} else {
values.put(MediaStore.Images.ImageColumns.DATA, file.getAbsolutePath());
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
values.clear();
}
}
}
}
감사합니다!
항상 110 개의 파일 만 복사합니까? 비디오 파일과 관련하여 - 얼마나 큰가? 작은 비디오 파일을 넣으면 무시됩니까? 로그에서 예외를 확인 했습니까? – yakobom
if (! file.createNewFile()) { 계속; 그 대구를 제거하십시오. 그건 소용 없어. – greenapps
테스트를 위해 ContentValues 내용없이 시도하십시오. – greenapps