2016-10-29 17 views
0

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

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

мой код:

public class MainActivity extends AppCompatActivity { 

    private static final int CHOOSE_FILE_REQUEST_CODE = 1; 
    String[] ids; 
    TextView textView; 
    Button btnImport; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     textView = (TextView) findViewById(R.id.text_view); 


     btnImport = (Button) findViewById(R.id.btn_import); 

     btnImport.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
       intent.addCategory(Intent.CATEGORY_OPENABLE); 
       intent.setType("*/*"); 
       Intent i = Intent.createChooser(intent, "File"); 
       startActivityForResult(i, CHOOSE_FILE_REQUEST_CODE); 

      } 
     }); 



    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (data == null) { 
      return; 
     } 
     switch (requestCode) { 
      case 1: 
       if (resultCode == RESULT_OK) { 
        String path = data.getData().getPath(); 
        String url = data.getData().getPath(); 
        File file = new File(url); 
        Log.i("***", path); 
        // InputStream inputStream = getResources().openRawResource(R.raw.sample); 
        InputStream inputStream = null ; 
        BufferedReader bufferedReader = null; 

        try { 
         inputStream = new FileInputStream(file); 
         bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
         String csvLine; 
         StringBuffer stringBuffer = new StringBuffer(); 

         while ((csvLine = bufferedReader.readLine()) != null) { 

          ids = csvLine.split(","); 

          for (int i = 0; i < ids.length; i++) { 
           if (i % 19 == 1) { 
            stringBuffer.append(ids[i]); 

            stringBuffer.append("\n"); 
            Log.i("***", stringBuffer.toString()); 

           } 
           textView.setText(stringBuffer.toString()); 
          } 
         } 


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

       } 
     } 
    } 
} 

это бревна:

10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err: java.io.FileNotFoundException: /document/E896-1C04:Download/39196035.doc: open failed: ENOENT (No such file or directory) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:452) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at java.io.FileInputStream.<init>(FileInputStream.java:76) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at com.example.ndrzhr.readcsv02.MainActivity$override.onActivityResult(MainActivity.java:69) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at com.example.ndrzhr.readcsv02.MainActivity$override.access$dispatch(MainActivity.java) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at com.example.ndrzhr.readcsv02.MainActivity.onActivityResult(MainActivity.java:0) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at android.app.Activity.dispatchActivityResult(Activity.java:7137) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at android.app.ActivityThread.deliverResults(ActivityThread.java:4916) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at android.app.ActivityThread.handleSendResult(ActivityThread.java:4963) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at android.app.ActivityThread.access$1600(ActivityThread.java:221) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1848) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at android.os.Looper.loop(Looper.java:158) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:7224) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at libcore.io.Posix.open(Native Method) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:438) 
10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err: ... 15 more 
10-29 11:05:48.130 14716-14716/com.example.ndrzhr.readcsv02 I/Timeline: Timeline: Activity_idle id: [email protected] time:713512721 
10-29 11:15:48.520 14716-14716/com.example.ndrzhr.readcsv02 V/ActivityThread: updateVisibility : ActivityRecord{5091c6e [email protected] {com.example.ndrzhr.readcsv02/com.example.ndrzhr.readcsv02.MainActivity}} show : true 

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

10-29 12:43:27.360 19779-19779/com.example.ndrzhr.readcsv02 W/System.err: java.io.FileNotFoundException: content:/com.android.externalstorage.documents/document/primary%3ADownload%2FUntitled%20document.txt: open failed: ENOENT (No such file or directory) 

для этого:

if (resultCode == RESULT_OK) { 
     Uri uri = data.getData(); 
     String type = data.getType(); 
     Log.i("***", "Pick completed: " + uri + " " + type); 
     if (uri != null) { 
      String path = uri.toString(); 

      FileReader fileReader = null; 
      BufferedReader bufferedReader = null; 

      try { 
       //inputStream = new FileInputStream(file); 
       fileReader = new FileReader(path); 
       bufferedReader = new BufferedReader(fileReader); 
       String csvLine; 
       StringBuffer stringBuffer = new StringBuffer(); 

       while ((csvLine = bufferedReader.readLine()) != null) { 
        ids = csvLine.split(","); 
        for (int i = 0; i < ids.length; i++) { 
         if (i % 19 == 1) { 
          stringBuffer.append(ids[i]); 

          stringBuffer.append("\n"); 
          Log.i("***", stringBuffer.toString()); 
          textView.setText(stringBuffer.toString()); 

         } 

        } 
       } 


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

     } 
    } 
} 
+0

tis может иметь так много причин, пожалуйста, dd журнал ошибок на ваш вопрос. Возможно, вы не добавляете разрешения (время выполнения в MM и выше), путь к файлу неверен или, например, если у вас установлен cyanogenmod, каталог не монтируется ... – Opiatefuchs

+0

Благодарим вас за быстрый ответ ... Я добавил права доступа, путь к файлу - тот, который я получил от обратного вызова данных отступа .String path = data.getData(). getPath(); – ndrzhr

+0

Вы должны были упомянуть точный путь, конечно. '/ document/E896-1C04: Загрузите/39196035.doc' deliveted by 'uri.getPath()'. Ну, это не путь к файловой системе. Пожалуйста, опубликуйте значение 'uri.toString()', как вам нужно. – greenapps

ответ

0

открыть InputStream для выбранного Uri схемы контента в Rigth образом:

InputStream is = getContentResolver().openInputStream(data.getData()); 
+0

BAM !!! работает ! – ndrzhr