簡體   English   中英

嘗試使用Android Studio從內部存儲的downloads文件夾中讀取.csv文件

[英]Trying to read a .csv file from downloads folder of internal storage with Android Studio

我正在嘗試讀取.csv文件的內容,該文件位於手機內部存儲的downloads文件夾中。 我的代碼如下所示。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    browse = (Button) findViewById(R.id.browse);
    editTextPath = (EditText) findViewById(R.id.path);
    browse.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("*/*");
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(Intent.createChooser(intent,"Select file or dir"), 1);
            setResult(Activity.RESULT_OK);
            Log.e("Content","In onclick");
        }
    });}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.e("Content","In onactivity");
    if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
        String path = data.getData().getPath();
        Log.e("Pathb",path);
        proImportCSV(new File(data.getData().getPath()));
    }

}

private void proImportCSV(File file) {
    try{
        ContentValues cv = new ContentValues();
        FileReader fr = new FileReader(file);
        CSVReader dataRead = new CSVReader(fr);
        String[] vv = null;
        while((vv = dataRead.readNext())!=null) {
            cv.clear();
        }
        dataRead.close();
    }
    catch (Exception e) { Log.e("TAG",e.toString());

    }
}

我得到的錯誤是:

java.io.FileNotFoundException:/document/primary:Download/12132469_About_0_22092018045225.csv:打開失敗:ENOENT(沒有這樣的文件或目錄)

我還分享了我的錯誤的屏幕截圖:

在此處輸入圖片說明

更新

我對以前共享的代碼做了一些小的更改:

private void proImportCSV(File file, Uri uri) {
    try{
        ContentValues cv = new ContentValues();
        InputStream inputStream = getContentResolver().openInputStream(uri);
        InputStreamReader isr = new InputStreamReader(inputStream);
        CSVReader dataRead = new CSVReader(isr);
        String[] vv = null;
        while((vv = dataRead.readNext())!=null) {
            cv.clear();
        }
        dataRead.close();
    }
    catch (Exception e) { Log.e("TAG",e.toString());

    }
}

在這里, uri = data.getData() 進行此更改后,出現以下錯誤

java.io.FileNotFoundException:/storage/emulated/0/Download/12132469_About_0_22092018045225.csv:打開失敗:EACCES(權限被拒絕)

另外,我已經將這行代碼添加到manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

您並非總是可以從內容URI創建工作文件。 但是您可能不需要它。 new CSVReader(fr); 接受Reader作為參數。 您可以使用InputStreamReader ,從創建InputStream ,從創建的Uri用下面的方法:

InputStream  inputStream = getContentResolver().openInputStream(uri);

uridata.getData()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM