【问题标题】:Trying to read a .csv file from downloads folder of internal storage with Android Studio尝试使用 Android Studio 从内部存储的下载文件夹中读取 .csv 文件
【发布时间】:2018-12-03 08:33:49
【问题描述】:

我正在尝试读取手机内部存储的下载文件夹中的.csv 文件的内容。我的代码如下所示。

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(没有这样的文件或目录)

我还分享了我的错误截图:

enter image description here

更新

我对之前共享的代码做了一个小改动:

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" />

【问题讨论】:

标签: java android android-studio android-studio-3.2


【解决方案1】:

您并不总是可以从内容 URI 创建工作文件。但你可能不需要它。 new CSVReader(fr); 接受 Reader 作为参数。您可以使用InputStreamReader,从InputStream 创建,从Uri 使用以下方法创建:

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

其中uridata.getData()

【讨论】:

  • 嗨,您的建议有助于消除错误 open failed: ENOENT (No such file or directory) 。但是,现在我收到另一个错误open failed: EACCES (Permission denied),这也是一个 java.IO.FileNotFoundException。你能帮忙吗?
  • @ViharBhatt 看起来您也需要运行时权限(不仅仅是在清单中请求它们)
  • 我该怎么做?你能提供一些关于我的文件在哪里以及我应该如何使用它的代码和信息吗?感谢您的努力。
  • @ViharBhatt 使用搜索应该需要大约 18 秒才能找到
  • @Vladyslav Matviienko 谢谢哥们。我找到了该运行时权限错误的解决方案。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2014-09-26
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 2021-04-16
  • 2013-04-28
相关资源
最近更新 更多