2017-02-06 2 views
0

Я использую приведенный ниже код для перемещения файлов на Android.Ошибка при перемещении файлов в Android

public static void moveFile(String inputPath, String inputFile, String outputPath, String absolutePath) { 

    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(absolutePath).delete(); 


    } 

    catch (FileNotFoundException fnfe1) { 
     Log.e("Moving file not found", fnfe1.getMessage()); 
    } 
    catch (Exception e) { 
     Log.e("While Moving", e.getMessage()); 
    } 

Но большинство времени он показывает мне ошибку, как показано ниже:

Moving файл не найден: /call_14-43-46_IN_+919737276726.amr (только для чтения файловой системы)

Я проверил, и файл, который должен быть перемещен, является обычным файлом, а не только для чтения, поскольку он записывается регистратором вызовов. Пожалуйста, помогите.

+0

Показать, как вы называете эту функцию. Покажите значение параметров. – greenapps

+0

'dir.mkdirs();'. Проверьте возвращаемое значение, так как оно может не создать директорию. В этом случае вы увидите тост для пользователя, говорящего об этом. И вернуться. Не продолжайте, так как мало смысла пытаться создать файл в директории, которая не существует. – greenapps

ответ

0

В андроиде вы не можете напрямую получить доступ к корню (/), он установлен только для чтения. Проверьте свой путь, вы не должны пытаться писать или читать из/в любом случае.

+0

Я не получаю доступ к корневому пути, и как источник, так и путь назначения находятся во внешнем хранилище. Я отредактировал вопрос. –

0

Вам нужно спросить себя, должны ли ваши файлы быть доступными для «внешнего» мира или нужны только вашей программе. В зависимости от этого решения у вас есть несколько вариантов:

Экземпляры Context (например, Activity) знают openFileOutput и openFileInput. Оба возвращают потоки и могут использоваться без дополнительных разрешений, но хранить файлы в местах, приватных для приложения.

Если вам нужны только временные файлы, рассмотрите Context.getCacheDir. Или Java-путь: File.createTempFile. Еще один способ, который стоит посмотреть, - Context.getExternalFilesDir.

Примечание стороны: вместо склеивания своего пути вручную, я предлагаю использовать новый File("path", "dir").getAbsolutePath

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