Saya ingin memindahkan, menyalin, dan menghapus file dan direktori secara terprogram pada kartu SD. Saya telah melakukan pencarian Google tetapi tidak dapat menemukan sesuatu yang berguna.
93
Gunakan Java I / O standar . Gunakan Environment.getExternalStorageDirectory()
untuk mengakses root penyimpanan eksternal (yang, pada beberapa perangkat, adalah kartu SD).
cp
) untuk membuat cadangan sebelum saya menimpa file. Apa itu mungkin?setel izin yang benar di manifes
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
di bawah ini adalah fungsi yang akan memindahkan file Anda secara terprogram
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()); } }
Untuk menghapus penggunaan file
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()); } }
Untuk menyalin
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()); } }
sumber
Pindahkan file:
File from = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/kaic1/imagem.jpg"); File to = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/kaic2/imagem.jpg"); from.renameTo(to);
sumber
renameTo
gagal tanpa penjelasan apa punFungsi untuk memindahkan file:
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(); } }
sumber
file.delete()
Menghapus
public static void deleteRecursive(File fileOrDirectory) { if (fileOrDirectory.isDirectory()) for (File child : fileOrDirectory.listFiles()) deleteRecursive(child); fileOrDirectory.delete(); }
periksa ini tautan untuk fungsi di atas.
Salinan
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(); } }
Pindah
memindahkan tidak hanya menyalin folder satu lokasi ke lokasi lain kemudian menghapus folder itu
nyata
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
sumber
Izin:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Dapatkan folder root kartu SD:
Environment.getExternalStorageDirectory()
Hapus file: ini adalah contoh cara menghapus semua folder kosong di folder root:
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); } } }
Salin file:
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(); }
Pindah file = salin + hapus file sumber
sumber
File from = new File(Environment.getExternalStorageDirectory().getAbsolutePath().getAbsolutePath()+"/kaic1/imagem.jpg"); File to = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/kaic2/imagem.jpg"); from.renameTo(to);
sumber
Salin file menggunakan Square's Okio :
BufferedSink bufferedSink = Okio.buffer(Okio.sink(destinationFile)); bufferedSink.writeAll(Okio.source(sourceFile)); bufferedSink.close();
sumber
/** * Copy the local DB file of an application to the root of external storage directory * @param context the Context of application * @param dbName The name of the DB */ private void copyDbToExternalStorage(Context context , String dbName){ try { File name = context.getDatabasePath(dbName); File sdcardFile = new File(Environment.getExternalStorageDirectory() , "test.db");//The name of output file sdcardFile.createNewFile(); InputStream inputStream = null; OutputStream outputStream = null; inputStream = new FileInputStream(name); outputStream = new FileOutputStream(sdcardFile); byte[] buffer = new byte[1024]; int read; while ((read = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, read); } inputStream.close(); outputStream.flush(); outputStream.close(); } catch (Exception e) { Log.e("Exception" , e.toString()); } }
sumber
Jika Anda menggunakan Guava, Anda dapat menggunakan Files.move (dari, ke)
sumber
Xamarin Android
public static bool MoveFile(string CurrentFilePath, string NewFilePath) { try { using (var f = new File(CurrentFilePath)) using (var i = new FileInputStream(f)) using (var o = new FileOutputStream(NewFilePath)) { i.Channel.TransferTo(0, i.Channel.Size(), o.Channel); f.Delete(); } return true; } catch { return false; } } public static bool CopyFile(string CurrentFilePath, string NewFilePath) { try { using (var i = new FileInputStream(CurrentFilePath)) using (var o = new FileOutputStream(NewFilePath)) i.Channel.TransferTo(0, i.Channel.Size(), o.Channel); return true; } catch { return false; } } public static bool DeleteFile(string FilePath) { try { using (var file = new File(FilePath)) file.Delete(); return true; } catch { return false; } }
sumber
Untuk memindahkan file, api ini dapat digunakan tetapi Anda membutuhkan setidaknya 26 sebagai level api -
pindahkan file
Tetapi jika Anda ingin memindahkan direktori, tidak ada dukungan sehingga kode asli ini dapat digunakan
import org.apache.commons.io.FileUtils; import java.io.IOException; import java.io.File; public class FileModule { public void moveDirectory(String src, String des) { File srcDir = new File(src); File destDir = new File(des); try { FileUtils.moveDirectory(srcDir,destDir); } catch (Exception e) { Log.e("Exception" , e.toString()); } } public void deleteDirectory(String dir) { File delDir = new File(dir); try { FileUtils.deleteDirectory(delDir); } catch (IOException e) { Log.e("Exception" , e.toString()); } } }
sumber
Memindahkan file menggunakan kotlin. Aplikasi harus memiliki izin untuk menulis file di direktori tujuan.
@Throws(FileNotFoundException::class, IOError::class) private fun moveTo(source: File, dest: File, destDirectory: File? = null) { if (destDirectory?.exists() == false) { destDirectory.mkdir() } val fis = FileInputStream(source) val bufferLength = 1024 val buffer = ByteArray(bufferLength) val fos = FileOutputStream(dest) val bos = BufferedOutputStream(fos, bufferLength) var read = fis.read(buffer, 0, read) while (read != -1) { bos.write(buffer, 0, read) read = fis.read(buffer) // if read value is -1, it escapes loop. } fis.close() bos.flush() bos.close() if (!source.delete()) { HLog.w(TAG, klass, "failed to delete ${source.name}") } }
sumber
Pindahkan File atau Folder:
public static void moveFile(File srcFileOrDirectory, File desFileOrDirectory) throws IOException { File newFile = new File(desFileOrDirectory, srcFileOrDirectory.getName()); try (FileChannel outputChannel = new FileOutputStream(newFile).getChannel(); FileChannel inputChannel = new FileInputStream(srcFileOrDirectory).getChannel()) { inputChannel.transferTo(0, inputChannel.size(), outputChannel); inputChannel.close(); deleteRecursive(srcFileOrDirectory); } } private static void deleteRecursive(File fileOrDirectory) { if (fileOrDirectory.isDirectory()) for (File child : Objects.requireNonNull(fileOrDirectory.listFiles())) deleteRecursive(child); fileOrDirectory.delete(); }
sumber