文件对象未创建

时间:2017-11-30 11:43:36

标签: android android-file

我正在向用户提供文件浏览器以选择文件。在onActivityResult上我得到文件路径为 - /file/sdcard/Android/data/com.coca_cola.android.conferenceapp/cache/Conference/export.txt。当我尝试在此创建文件对象时,我无法创建。当我删除/ file /并在sdcard / Android / data / com.coca_cola.android.conferenceapp / cache / Conference / export.txt上创建文件对象时,它就会被创建。但我不能硬编码从文件路径中删除/ file /,因为在其他设备上它将提供一些其他路径。下面是代码

private void readContactFromFile(String path) {
    StringBuilder text = new StringBuilder();
    try {
        String st = "/file/sdcard/Android/data/com.coca_cola.android.conferenceapp/cache/Conference/export.txt";
        File file = new File(st);
        if (file.exists()) {
            Log.v("TTT", "file exist");
        }
        Log.v("TTT", file.toString());
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while ((line = br.readLine()) != null) {
            text.append(line);
            Log.i("Test", "text : " + text + " : end");
            text.append('\n');
        }
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我正在OnActivityResult上获得路径

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK) {

        switch (requestCode) {

            case REQUEST_PICK_FILE:
                Uri uri = data.getData();
                String path = data.getData().getPath();
                Log.v("PATH", path);

                readContactFromFile(path);
                break;
        }
    }
}

这就是我要求打开文件浏览器的方式

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");      //all files
    //intent.setType("text/xml");   //XML file only
    intent.addCategory(Intent.CATEGORY_OPENABLE);

    try {
        startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), REQUEST_PICK_FILE);
    } catch (android.content.ActivityNotFoundException ex) {
        // Potentially direct the user to the Market with a Dialog
        Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show();
    }

如何获得完美路径或如何删除此问题? 在此先感谢

2 个答案:

答案 0 :(得分:1)

由于不同设备上的路径不同,您应该使用框架api为您检索合适的路径。

查看Environment class

答案 1 :(得分:0)

不使用硬编码的字符串路径,而是使用Environment类

获取路径
File file=new File(String.valueOf(Environment.getExternalStorageDirectory())+"YOUR_REQUIRED_FILE_PATH");

不会将设备推迟到设备。 希望这会有所帮助:)