-
파일 복사 붙여넣기 메소드안드로이드(스튜디오)/막 써 2018. 10. 24. 11:37반응형
/**
* 파일을 복사하여 붙여넣기.
* @param copyPath 복사 경로
* @param copyFileName 복사 파일명(확장자 포함)
* @param pastePath 붙여넣기 경로
* @param pasteFileName 붙여넣기 파일명(확장자 포함)
* @param isOverWrite 붙여넣기 경로에 같은 파일명을 가진 파일이 있을 경우 덮어쓰기 여부
* @param isDeleteCopyFile 복사 파일 지우기 여부
* @return true : 성공, false : 실패
*/
@RequiresPermission(allOf = {
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
})
public static boolean fileCopyPaste(String copyPath, String copyFileName, String pastePath, String pasteFileName, boolean isOverWrite, boolean isDeleteCopyFile) throws IOException{
if(copyPath == null || copyPath.length() <= 0 ||
copyFileName == null || copyFileName.length() <= 0){
throw new IllegalArgumentException("Copy path or file name is null.");
}
if(pastePath == null || pastePath.length() <= 0 ||
pasteFileName == null || pasteFileName.length() <= 0){
throw new IllegalArgumentException("Paste path or file name is null.");
}
boolean isSuccess = false;
File copy = new File(copyPath, copyFileName);
File paste = new File(pastePath, pasteFileName);
if(!copy.exists()){
throw new IOException("Copy file is not exists.");
}else{
if(!copy.isFile()){
throw new IOException("Copy file is not file.");
}
}
File pasteFolder = paste.getParentFile();
if(!pasteFolder.exists()){
isSuccess = pasteFolder.mkdirs();
}else{
if(paste.exists()){
if(isOverWrite){
isSuccess = paste.delete();
}else{
File[] pasteFolderFileList = pasteFolder.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isFile();
}
});
boolean hasReName = false;
int num = 1;
String noExtensionPasteFileName = pasteFileName.substring(0, pasteFileName.lastIndexOf("."));
String pasteFileExtension = pasteFileName.substring(pasteFileName.lastIndexOf("."));
String reName = noExtensionPasteFileName + " (" + String.valueOf(num++) + ")" + pasteFileExtension;
for(int i = 0; i < pasteFolderFileList.length; i++){
File pasteFolderFile = pasteFolderFileList[i];
if(reName.equals(pasteFolderFile.getName())){
hasReName = true;
}
if(i == (pasteFolderFileList.length - 1)){
if(hasReName){
hasReName = false;
reName = noExtensionPasteFileName + " (" + String.valueOf(num++) + ")" + pasteFileExtension;
i = -1;
}
}
}
paste = new File(pasteFolder, reName);
isSuccess = true;
}
}else{
isSuccess = true;
}
}
if(!isSuccess){
throw new IOException("Failed create paste path.");
}
isSuccess = false;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(copy));
bos = new BufferedOutputStream(new FileOutputStream(paste));
byte[] readByte = new byte[4096];
int data = 0;
while((data = bis.read(readByte, 0, 4096)) != -1) {
bos.write(readByte, 0, data);
}
bos.flush();
if(isDeleteCopyFile){
isSuccess = copy.delete();
}else{
isSuccess = true;
}
} catch (IOException e) {
throw new IOException(e);
} catch (Exception e) {
throw new IOException(e);
} finally {
try{
bis.close();
}catch (Exception e){
// ignore
}
try{
bos.close();
}catch (Exception e){
// ignore
}
}
return isSuccess;
}반응형'안드로이드(스튜디오) > 막 써' 카테고리의 다른 글
텍스트 파일 읽기, 쓰기 메서드 (0) 2019.08.30 파일탐색기 샘플 (0) 2018.11.28 LocationManager 샘플(추가 정의 필요) (2) 2018.09.30 권한 요청 샘플(런타임 권한 요청 X) (0) 2018.08.14 release apk 빌드시 Could not find com.android.tools.lint:lint-gradle:xx.x.x. 오류 (0) 2018.07.25