2016-10-29 9 views
0

...파일을 열면 안드로이드 파일 선택에 실패 유지 나는 SD 카드 또는 구글에 드라이브 또는 안드로이드 파일 선택기를 사용하여 내부 메모리 중 하나를 저장 한 파일을 열고 읽을 노력하고

파일을 성공적으로 선택한 후 다음 코드에 표시된대로 파일 경로를 가져 와서 읽을 때 파일이 존재하지 않음/파일이나 디렉터리가 없음 ...

내 코드 :

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에는 많은 이유가있을 수 있습니다. 귀하의 질문에 오류 로그를 기입하십시오. 예를 들어 cyanogenmod가 설치되어있는 경우, 디렉토리가 마운트되지 않았을 때와 같이 파일 경로가 잘못되었거나 그럴 가능성이 있습니다 ... – Opiatefuchs

+0

고맙습니다. 빠른 응답 ... 사용 권한을 추가했는데 파일 경로는 들여 쓰기 데이터 콜백에서 가져온 파일 경로입니다 .String path = data.getData(). getPath(); – ndrzhr

+0

정확한 경로를 언급해야합니다. '/ document/E896-1C04 ​​: Download/39196035.doc'는'uri.getPath()'에 의해 배포됩니다. 파일 시스템 경로가 아닙니다. uri.toString()의 값을 필요에 따라 게시하십시오. – greenapps

답변

0

열고 rigth 방법은 선택된 URI 컨텐츠 방식에 대한 InputStream에게 :

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

BAM !!! 그 일! – ndrzhr