프로그래밍 방식으로 SD 카드의 파일 및 디렉토리를 이동, 복사 및 삭제하고 싶습니다. Google 검색을 수행했지만 유용한 정보를 찾을 수 없습니다.
답변
표준 Java I / O를 사용 합니다. Environment.getExternalStorageDirectory()
외부 저장소 (일부 장치에서는 SD 카드)의 루트로 이동하는 데 사용 합니다.
답변
매니페스트에 올바른 권한 설정
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
아래는 프로그래밍 방식으로 파일을 이동하는 기능입니다.
private void moveFile(String inputPath, String inputFile, String outputPath) {
InputStream in = null;
OutputStream out = null;
try {
//create output directory if it doesn't exist
File dir = new File (outputPath);
if (!dir.exists())
{
dir.mkdirs();
}
in = new FileInputStream(inputPath + inputFile);
out = new FileOutputStream(outputPath + inputFile);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
in = null;
// write the output file
out.flush();
out.close();
out = null;
// delete the original file
new File(inputPath + inputFile).delete();
}
catch (FileNotFoundException fnfe1) {
Log.e("tag", fnfe1.getMessage());
}
catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
파일 사용을 삭제하려면
private void deleteFile(String inputPath, String inputFile) {
try {
// delete the original file
new File(inputPath + inputFile).delete();
}
catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
복사하려면
private void copyFile(String inputPath, String inputFile, String outputPath) {
InputStream in = null;
OutputStream out = null;
try {
//create output directory if it doesn't exist
File dir = new File (outputPath);
if (!dir.exists())
{
dir.mkdirs();
}
in = new FileInputStream(inputPath + inputFile);
out = new FileOutputStream(outputPath + inputFile);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
in = null;
// write the output file (You have now copied the file)
out.flush();
out.close();
out = null;
} catch (FileNotFoundException fnfe1) {
Log.e("tag", fnfe1.getMessage());
}
catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
답변
파일 이동 :
File from = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/kaic1/imagem.jpg");
File to = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/kaic2/imagem.jpg");
from.renameTo(to);
답변
파일 이동 기능 :
private void moveFile(File file, File dir) throws IOException {
File newFile = new File(dir, file.getName());
FileChannel outputChannel = null;
FileChannel inputChannel = null;
try {
outputChannel = new FileOutputStream(newFile).getChannel();
inputChannel = new FileInputStream(file).getChannel();
inputChannel.transferTo(0, inputChannel.size(), outputChannel);
inputChannel.close();
file.delete();
} finally {
if (inputChannel != null) inputChannel.close();
if (outputChannel != null) outputChannel.close();
}
}
답변
지우다
public static void deleteRecursive(File fileOrDirectory) {
if (fileOrDirectory.isDirectory())
for (File child : fileOrDirectory.listFiles())
deleteRecursive(child);
fileOrDirectory.delete();
}
위의 기능에 대해이 링크를 확인하십시오 .
부
public static void copyDirectoryOneLocationToAnotherLocation(File sourceLocation, File targetLocation)
throws IOException {
if (sourceLocation.isDirectory()) {
if (!targetLocation.exists()) {
targetLocation.mkdir();
}
String[] children = sourceLocation.list();
for (int i = 0; i < sourceLocation.listFiles().length; i++) {
copyDirectoryOneLocationToAnotherLocation(new File(sourceLocation, children[i]),
new File(targetLocation, children[i]));
}
} else {
InputStream in = new FileInputStream(sourceLocation);
OutputStream out = new FileOutputStream(targetLocation);
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
}
움직임
이동은 아무것도 아닙니다 . 폴더를 한 위치에 다른 위치로 복사 한 다음 폴더 를 삭제하십시오. 그게 전부에게 그것을
명백한
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
답변
-
권한 :
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
SD 카드 루트 폴더 가져 오기 :
Environment.getExternalStorageDirectory()
-
파일 삭제 : 다음은 루트 폴더에서 모든 빈 폴더를 삭제하는 방법에 대한 예입니다.
public static void deleteEmptyFolder(File rootFolder){ if (!rootFolder.isDirectory()) return; File[] childFiles = rootFolder.listFiles(); if (childFiles==null) return; if (childFiles.length == 0){ rootFolder.delete(); } else { for (File childFile : childFiles){ deleteEmptyFolder(childFile); } } }
-
파일 복사 :
public static void copyFile(File src, File dst) throws IOException { FileInputStream var2 = new FileInputStream(src); FileOutputStream var3 = new FileOutputStream(dst); byte[] var4 = new byte[1024]; int var5; while((var5 = var2.read(var4)) > 0) { var3.write(var4, 0, var5); } var2.close(); var3.close(); }
-
파일 이동 = 복사 + 소스 파일 삭제
답변
File from = new File(Environment.getExternalStorageDirectory().getAbsolutePath().getAbsolutePath()+"/kaic1/imagem.jpg");
File to = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/kaic2/imagem.jpg");
from.renameTo(to);