13 ответов:
используйте стандартный 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);
удалить
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" />
Permissions:
<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);
скопируйте файл с помощью квадрата Okio:
BufferedSink bufferedSink = Okio.buffer(Okio.sink(destinationFile)); bufferedSink.writeAll(Okio.source(sourceFile)); bufferedSink.close();
Если вы используете гуаву, вы можете использовать файлы.move (source, dest)
/** * 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()); } }
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; } }
для перемещения файла этот api может быть использован, но вам нужно по крайней мере 26 как уровень api -
но если вы хотите переместить каталог нет поддержки, так что этот собственный код может быть использован
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()); } } }
легко получить пути внутренних и внешних путей SD-карты.
для этого нужно просто использовать метод отражения и нет необходимости укоренения или подписания Приложения. Добавьте следующее разрешение в манифест.
uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"код:
final Class<?> surfaceControlClass = Class.forName("android.os.storage.StorageManager"); Method method1 = surfaceControlClass.getMethod("getVolumePaths") method1.setAccessible(true); final Object object = context.getSystemService(Context.STORAGE_SERVICE); String[] volumes = method1.invoke(object)
Comments