2016-05-25 3 views
0

С помощью этого кода я получаю содержимое файла, расположенного в корневом каталоге Google Диска. Теперь мое требование состоит в том, чтобы преобразовать массив байта [] в файл и сохранить его во внешнем устройстве памяти. при отладке я получаю эту ошибку:Android конвертировать байт в файл

at libcore.io.IoBridge.open(IoBridge.java:456) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at java.io.FileInputStream.<init>(FileInputStream.java:76) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at com.spjanson.gdaademo.MainActivity$4.doInBackground(MainActivity.java:276) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at com.spjanson.gdaademo.MainActivity$4.doInBackground(MainActivity.java:250) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at java.lang.Thread.run(Thread.java:818) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err: Caused by: android.system.ErrnoException: open failed: ENAMETOOLONG (File name too long) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at libcore.io.Posix.open(Native Method) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:442) 
05-25 18:08:56.787 19204-20008/com.spjanson.gdaademo W/System.err: ... 9 more 

статический метод, чтобы получить файл с диска

static byte[] read(String id) { 
    byte[] buf = null; 
    if (mGAC != null && mGAC.isConnected() && id != null) try { 
     DriveFile df = Drive.DriveApi.getFile(mGAC, DriveId.decodeFromString(id)); 
     DriveContentsResult rslt = df.open(mGAC, DriveFile.MODE_READ_ONLY, null).await(); 
     if ((rslt != null) && rslt.getStatus().isSuccess()) { 
      DriveContents cont = rslt.getDriveContents(); 
      buf = UT.is2Bytes(cont.getInputStream()); 
      cont.discard(mGAC); // or cont.commit(); they are equiv if READONLY 
     } 
    } catch (Exception e) { 
     UT.le(e); 
    } 
    return buf; 
} 

асинхронной сохранить файл

@Override 
      protected Void doInBackground(Void... params) { 
       mBusy = true; 
       ArrayList<ContentValues> cvs = GDAA.searchDB(UT.FILE_NAME); 
       if (cvs != null) for (ContentValues cv : cvs) { 
        String gdid = cv.getAsString(UT.GDID); 
        System.out.println("ID..... " + gdid); 
        byte[] buf = GDAA.read(gdid); 

        String str = null; 
        if (buf != null) { 
         try { 
          str = new String(buf, "UTF-8"); 
         } catch (UnsupportedEncodingException e) { 
          e.printStackTrace(); 
         } 

         FileChannel source = null; 
         FileChannel destination = null; 
         File sd = new File(Environment.getExternalStorageDirectory(), "myfile.db"); 
         String backupDBPath = "myfile.db"; 
         File internalDB = new File(str); 
         File backupDB = new File(sd, backupDBPath); 
         try { 
          source = new FileInputStream(internalDB).getChannel(); 
          destination = new FileOutputStream(backupDB).getChannel(); 
          destination.transferFrom(source, 0, source.size()); 
          source.close(); 
          destination.close(); 

         } catch (IOException e) { 
          e.printStackTrace(); 

         } 

         //String str = buf == null ? "" : new String(buf); 
         //File fl = UT.str2File(str, "database.db"); 
         } 


       } 

       return null; 
      } 
+0

вы хотите сохранить его как ** yourFile.bin **? –

+0

Я хочу сохранить файл в базе данных – user2847219

+0

Вы удаляете ошибку из своего логарифма. Так мы не знаем ошибку. – greenapps

ответ

1

Я хотел бы сказать, проблема здесь:

File internalDB = new File(str); 

Имя файла для internalDB создается на то, что вы вы читаете в из буфера и бросает:

android.system.ErrnoException: open failed: ENAMETOOLONG (File name too long) 
+0

Каким образом я должен следовать? – user2847219

+0

@ user2847219 Вы имели в виду название 'str' в качестве имени файла? Из вашего кода это похоже на то, что вы могли использовать «sd» в качестве имени файла. Итак, файл internalDB = new File (sd); вместо файла internalDB = new File (str); – padonald

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