Я пытаюсь реализовать File Picker в своем проекте Android. Что мне удалось сделать до сих пор:
Intent chooseFile;
Intent intent;
chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("*/*");
intent = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(intent, PICKFILE_RESULT_CODE);
И затем в моем onActivityResult()
switch(requestCode){
 case PICKFILE_RESULT_CODE:
   if(resultCode==-1){
      Uri uri = data.getData();
      String filePath = uri.getPath();
      Toast.makeText(getActivity(), filePath,
                        Toast.LENGTH_LONG).show();
    }
 break;
}
Это открывает сборщик файлов, но это не то, что я хочу. Например, я хочу выбрать файл (.txt), а затем получить этот File, а затем использовать его. С помощью этого кода я думал, что получаю полный путь, но этого не произойдет; например, я получаю: /document/5318/. Но с этим путем я не могу получить файл. Я создал метод под названием PathToFile(), который возвращает File:
 private File PathToFile(String path) {
    File tempFileToUpload;
    tempFileToUpload = new File(path);
    return tempFileToUpload;
}
То, что я пытаюсь сделать, это позволить пользователю выбрать File из любых средств DropBox, Drive, SDCard, Mega и т.д.... И я не нахожу способ чтобы сделать это правильно, я попытался получить Path, затем получить File этим Path... но он не работает, поэтому я думаю, что лучше получить сам File, а затем с помощью это File программно я Copy this или Delete.
EDIT (текущий код)
Мой Intent
 Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
 chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
 chooseFile.setType("text/plain");
 startActivityForResult(
      Intent.createChooser(chooseFile, "Choose a file"),
      PICKFILE_RESULT_CODE
 );
У меня вопрос, потому что я не знаю, что поддерживается как text/plain, но я собираюсь рассказать об этом, но в данный момент это не имеет значения.
На моем onActivityResult() я использовал то же самое, что @Lukas Knuth answer, но я не знаю, могу ли я с ним Copy this File в другую часть от моего SDCard Я жду ответа.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICKFILE_RESULT_CODE && resultCode == Activity.RESULT_OK){
        Uri content_describer = data.getData();
        //get the path 
        Log.d("Path???", content_describer.getPath());
        BufferedReader reader = null;
        try {
            // open the user-picked file for reading:
            InputStream in = getActivity().getContentResolver().openInputStream(content_describer);
            // now read the content:
            reader = new BufferedReader(new InputStreamReader(in));
            String line;
            StringBuilder builder = new StringBuilder();
            while ((line = reader.readLine()) != null){
                builder.append(line);
            }
            // Do something with the content in
            text.setText(builder.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
 getPath() из @Y.S.
Я делаю это:
    String[] projection = { MediaStore.Files.FileColumns.DATA };
            Cursor cursor = getActivity().getContentResolver().query(content_describer, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(projection[0]);
cursor.moveToFirst();
cursor.close();
Log.d( "PATH-->",cursor.getString(column_index));
Получает NullPointerException:
java.lang.RuntimeException: Ошибка предоставления результата ResultInfo {who = null, request = 131073, result = -1, data = Intent {dat = file:///path typ = text/plain flg = 0x3}} to activity {info.androidhive.tabsswipe/info.androidhive.tabsswipe.MainActivity2}: java.lang.NullPointerException
EDIT с кодом, работающим благодаря @YS, @Lukas Knuth и @CommonsWare.
Это Intent, где я принимаю только файлы text/plain.
Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
chooseFile.setType("text/plain");
startActivityForResult(
    Intent.createChooser(chooseFile, "Choose a file"),
    PICKFILE_RESULT_CODE
);
На моем onActivityResult() я создаю URI, где я получаю данные Intent, я создаю File, где я сохраняю  абсолютный путь content_describer.getPath();, и то я сохраняю имя пути, чтобы использовать его в TextView с content_describer.getLastPathSegment(); (это было удивительно, что @YS не знал об этой функции), и я создаю второй File, который я назвал destination и Я отправляю AbsolutePath, чтобы создать этот File.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICKFILE_RESULT_CODE && resultCode == Activity.RESULT_OK){
        Uri content_describer = data.getData();
        String src = content_describer.getPath();
        source = new File(src);
        Log.d("src is ", source.toString());
        String filename = content_describer.getLastPathSegment();
        text.setText(filename);
        Log.d("FileName is ",filename);
        destination = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Test/TestTest/" + filename);
        Log.d("Destination is ", destination.toString());
        SetToFolder.setEnabled(true);
    }
}
Также я создал функцию, которую вы должны отправить source file и destination file, которые мы создали ранее, чтобы скопировать ее в новую папку.
private void copy(File source, File destination) throws IOException {
    FileChannel in = new FileInputStream(source).getChannel();
    FileChannel out = new FileOutputStream(destination).getChannel();
    try {
        in.transferTo(0, in.size(), out);
    } catch(Exception e){
        Log.d("Exception", e.toString());
    } finally {
        if (in != null)
            in.close();
        if (out != null)
            out.close();
    }
}
Также я создал функцию, которая говорит мне, если эта папка существует или нет (мне нужно отправить destination file, если она не существует, я создаю эту папку, а если нет, я ничего не делаю.
private void DirectoryExist (File destination) {
    if(!destination.isDirectory()) {
        if(destination.mkdirs()){
            Log.d("Carpeta creada","....");
        }else{
            Log.d("Carpeta no creada","....");
        }
    }
Еще раз спасибо за вашу помощь, надеюсь, вам понравится этот код, сделанный с каждым из вас, ребята:)