使用以下路径检索SD卡上的文件:" / document / primary:..."

时间:2016-03-04 08:13:00

标签: java android

我试图读取SDCARD上的CSS文件内容。

我从动作中选择文件:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                    intent.setType("text/css");
                    startActivityForResult(intent, 1);

我在这里抓住路径:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
            SharedPreferences sharedPref = PreferenceManager
                    .getDefaultSharedPreferences(getActivity().getApplicationContext());
            SharedPreferences.Editor editor = sharedPref.edit();

            if (requestCode == 1) {
                if(resultCode == Activity.RESULT_OK){
                    Log.d("FilePicker", data.getData().toString());
                    editor.putString("custom_style_file", data.getData().getPath());
                    editor.commit();


                }
                if (resultCode == Activity.RESULT_CANCELED) {
                    //Write your code if there's no result
                }
            }
        }

我得到以下路径/document/primary:CustomCSS/myCustom.css

然后我尝试用这个函数读取文件的内容:

 public static String readFromSDcard(String path) {
        File sdcard = Environment.getExternalStorageDirectory();

        //Get the text file
        File file = new File(sdcard, path);

        //Read text from file
        StringBuilder text = new StringBuilder();

        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;

            while ((line = br.readLine()) != null) {
                text.append(line);
            }
            br.close();
        }
        catch (IOException e) {
            //You'll need to add proper error handling here
        }

        Log.d("Read from file", text.toString());
        return text.toString();
    }

该功能什么都不返回,我不知道我在这里做错了什么。

2 个答案:

答案 0 :(得分:1)

 //You'll need to add proper error handling here

如果你这样做,你就会明白为什么你的函数什么也不返回。

例如:

 text.append("IOException: " + e.getMessage() + "\n");

你的路径:

 /document/primary:CustomCSS/myCustom.css

这不是文件系统路径,而是内容提供者路径。

因此,获取内容解析器,然后让它打开该文件的输入流。之后,您可以使用通常的代码来阅读内容。

Google for getContentResolver()。openInputStream()。

答案 1 :(得分:0)

确保您在清单文件中具有读取存储权限

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