如何从android中的.txt文件中获取String

fre*_*ene 1 java string android file

我正在编写一个代码,它只为.txt文件创建一个文件选择器,然后在String中表示它的内容.问题是在选择文件后没有任何反应(日志表示结果代码为-1,请求代码为0).谁能帮我?这是我对.txt文件的选择:

 public void onUploadClicked(View view) {
    Intent intent = new Intent();
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("text/plain");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, getText(R.string.select_file)), REQUEST_CODE);

}
Run Code Online (Sandbox Code Playgroud)

这是我的OnActivityResult方法:

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

    if (resultCode == Activity.RESULT_OK) {
        if (data == null) {
            return;
        } else {
            Uri uri = data.getData();
            uploadedFile = new File(uri.getPath());
            try {
                readFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    } else {
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我将.txt文件读入String的方法:

private void readFile() throws IOException {

    uploadedString = new StringBuilder();
    BufferedReader reader = new BufferedReader(new FileReader(uploadedFile));
    String line;
    while ((line = reader.readLine()) != null) {

        uploadedString.append(line);
        uploadedString.append('\n');
    }
    Log.i("Uploaded successfully: ", uploadedString.toString());
    reader.close();
}
Run Code Online (Sandbox Code Playgroud)

Emm*_*ali 5

试试这个

public static int PICK_FILE = 1;
Run Code Online (Sandbox Code Playgroud)

然后压倒一切 onActivityResult()

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

        if (requestCode == PICK_FILE) {
            if (resultCode == RESULT_OK) {
                // User pick the file
                Uri uri = data.getData();
                String fileContent = readTextFile(uri);
                Toast.makeText(this, fileContent, Toast.LENGTH_LONG).show();
            } else {
                Log.i(TAG, data.toString());
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

读取用户选择的文本文件的方法

    private String readTextFile(Uri uri){
        BufferedReader reader = null;
        StringBuilder builder = new StringBuilder();
        try {
            reader = new BufferedReader(new InputStreamReader(getContentResolver().openInputStream(uri)));
            String line = "";

            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return builder.toString();
    }
Run Code Online (Sandbox Code Playgroud)

创建隐式意图

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/plain");
startActivityForResult(intent, PICK_FILE);
Run Code Online (Sandbox Code Playgroud)