2017-01-18 4 views
-1

Мне нужно сделать кнопку, чтобы она перемещала определенный файл на внешний накопитель. Я установил манифест, чтобы он мог записывать в External Storage, но я не могу найти код для записи определенного файла для записи во внешнее хранилище.Android перемещает файл на внешнее устройство с помощью кнопки

+0

Используйте 'getExternalFilesDir()' или связанные методы в 'Context' или' getExternalStoragePublicDirectory() 'на' Environment', чтобы получить объект «Файл», указывающий на корневую папку на внешнем хранилище. Оттуда это всего лишь стандартный ввод/вывод файлов Java (создайте объект «Файл» на основе этого корня в определенном месте, откройте «FileInputStream» и «FileOutputStream», скопируйте байты и т. Д.). – CommonsWare

ответ

0

Убедитесь, что следующие разрешения при записи/чтения внешней памяти в вашем AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

называется так:

copyExt("/storage/emulated/0/obb/Orange.txt",""); 

//turn String path names into File descriptors 
public void copyExt (String pathInternal, String pathExternal) { 
    File fInternal = new File (pathInternal);//pathInternal must exist 
// File fExternal = new File (pathExternal);//pathExternal must exist 
    String filename=path.substring(pathInternal.lastIndexOf("/")+1); 
    File fExternal = new File(Environment.getExternalStorage().getAbsolutePath()+"/filename"); 

    copyFile(fInternal,fExternal); 
} 

//make it static so we can re-use it, in a Utils class 
    public static void copyFile(File src, File dst) throws IOException 
    { 
     try 
     { 
      FileChannel inChannel = new FileInputStream(src).getChannel(); 
      FileChannel outChannel = new FileOutputStream(dst).getChannel(); 
      inChannel.transferTo(0, inChannel.size(), outChannel); 
     } 
     finally 
     { 
      if (inChannel != null) 
       inChannel.close(); 
      if (outChannel != null) 
       outChannel.close(); 
     } 
    } 

АЛЬТЕРНАТИВА

public static boolean copyFile(String from, String to) { 
try { 
    int bytesum = 0; 
    int byteread = 0; 
    File oldfile = new File(from); 
    if (oldfile.exists()) { 
     InputStream inStream = new FileInputStream(from); 
     FileOutputStream fs = new FileOutputStream(to); 
     byte[] buffer = new byte[1444]; 
     while ((byteread = inStream.read(buffer)) != -1) { 
      bytesum += byteread; 
      fs.write(buffer, 0, byteread); 
     } 
     inStream.close(); 
     fs.close(); 
    } 
    return true; 
} catch (Exception e) { 
    return false; 
} 
} 
+0

Итак, если имя файла - Orange.txt, нужно сказать ... copyExt ("/storage/emulated/0/obb/"Orange.txt" optional/external-USB/obb "); – Hyphnx

+0

Если файл находится в «/storage/emulated/0/obb/Orange.txt» (я заполняю второй аргумент для вас, так что передайте пустую строку), затем copyExt («/ storage/emulated/0/obb/Orange». текст" , ""); –

Смежные вопросы