Android читать выбранный файл

Я хочу выбрать файл с телефона и прочитать его. Я использовал намерение выбора файла, но когда я передаю URI из выбранного файла в функцию readTextFromUri2, он продолжает выдавать ошибку "FileNotFoundException", хотя я преобразовал uri в uri.getPath. Как я могу прочитать файл, который я выбираю из телефона Android?

private static final int FILE_SELECT_CODE=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("*/*");
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        try {
            startActivityForResult(
                    Intent.createChooser(intent, "Select a File to Upload"),
                    FILE_SELECT_CODE);
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(this, "Please install a File Manager.",
                    Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case FILE_SELECT_CODE:
                if (resultCode == RESULT_OK) {

                    // Get the Uri of the selected file
                    Uri uri = data.getData();

                    Log.d("TAG", "File Uri: " + uri.toString());
                    Toast.makeText(this,uri.toString(),Toast.LENGTH_LONG).show();

                    try {
                        Toast.makeText(this,readTextFromUri2(uri),Toast.LENGTH_LONG).show();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                break;
        }
        super.onActivityResult(requestCode, resultCode, data);

    }


    private String readTextFromUri2(Uri uri) throws  IOException{
        File file = new File(uri.getPath());
        Toast.makeText(this,uri.getPath(),Toast.LENGTH_LONG).show();
        FileInputStream inputStream = new FileInputStream(file);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        int i;
        try {
            i = inputStream.read();
            while (i != -1) {
                byteArrayOutputStream.write(i);
                i = inputStream.read();
            }
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return byteArrayOutputStream.toString();
    }

0 ответов

Другие вопросы по тегам