2016-01-22 4 views
1

Файл с сохранением Android (вход & Выходной поток) выбрасывает исключение (open failed: EINVAL (недействителен) аргумент)) в устройствах с предварительным леоптипомAndroid-файл с сохранением (входной и выходной поток) выбрасывает исключение (open failed: EINVAL (недопустимый аргумент)) в устройствах с предварительным лепестком

Я загружаю файл с URL-адреса (www.xyz.in/file/9) и сохраняя в SD-карте.

Папка создана Код:

try { 
    //String folder_name = "NewFolder"; 
    File f = new File(Environment.getExternalStorageDirectory(), "Venky"); 
    if (!f.exists()) { 
     f.mkdirs(); 
    } 
} catch (Exception e) { 
    Log.v("MTV", " createFileDirectory exception" + e); 
} 

Ниже я разместил (загрузка и сохранение файлов) код, В Android леденец, он прекрасно работает для загрузки и сохранения файла в SD-карте.

он не работает на устройствах с прелолипопом. Это бросает Исключение.

protected String doInBackground(String... f_url) { 
      int count; 
      try { 
       URL url = new URL(f_url[0]); 
       URLConnection conection = url.openConnection(); 
       conection.connect(); 
       // this will be useful so that you can show a tipical 0-100% progress bar 
       int lenghtOfFile = conection.getContentLength(); 

        String depo = conection.getHeaderField("Content-Disposition"); 
        String depoSplit[] = depo.split("filename="); 
        filename = depoSplit[1].replace("filename=", "").replace("\"", "").trim(); 

       filename=filename.trim(); 
       String Filetype = conection.getContentType(); 
       Log.v("fileName", " " + filename + " FileLength " + lenghtOfFile + " Filetype " + Filetype); 

       InputStream input = new BufferedInputStream(url.openStream(), 8192); 

       OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory().toString() + "/Venky/" + filename); 
       Log.v("", "" + Environment.getExternalStorageDirectory().toString() + "/" + R.string.app_name + "/" + filename); 
       byte data[] = new byte[1024]; 
       long total = 0; 
       while ((count = input.read(data)) != -1) { 
        total += count; 
        // publishing the progress.... 
        // After this onProgressUpdate will be called 
        publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 
        // writing data to file 
        output.write(data, 0, count); 
       } 
       // flushing output 
       output.flush(); 
       // closing streams 
       output.close(); 
       input.close(); 
       DownloadSucess = true; 
      } catch (Exception e) { 
       DownloadSucess = false; 
       Log.e("Error: ","Download Exception "+ e); 
      } 

      return null; 
     } 

Logcat (Исключение):

>E/Error:: Download Exception java.io.FileNotFoundException: /storage/sdcard0/Venky/FileName : smile-please.png: open failed: EINVAL (Invalid argument) 

Примечание: В манифесте, Оба WRITE_EXTERNAL_STORAGE & READ_EXTERNAL_STORAGE разрешений используются.

+0

Вы не проверяете возвращаемое значение mkdirs(). – greenapps

ответ

3

Величина вашей переменной filename составляет FileName : smile-please.png, а не то, что вы думаете- smile-please.png.

Просто зарегистрируйте содержимое имени файла перед использованием.

+0

Да, я использовал Logcat. имя файла is smile-please.png –

+0

Нет. Согласно вашему logcat mesage его 'FileName: smile-please.png' ... – greenapps

+0

мой Logcat - V/TMR: файл/storage/sdcard0/Venky/FileName: smile- please.png –

0

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

String path = Environment.getExternalStorageDirectory().toString() + "/Venky/"; 

File dir = new File(path); 

boolean created = dir.mkdir(); 

if (created) { 
    File fp = new File(path + filename);} 

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

  • Нет связанных вопросов^_^