Android 从Uri(本地、dropbox、驱动器等)获取文件数据

Android 从Uri(本地、dropbox、驱动器等)获取文件数据,android,file,android-intent,uri,file-conversion,Android,File,Android Intent,Uri,File Conversion,使用此方法时,我得到的值为0。我认为问题在于如何创建文件。我希望能够通过Intent.ACTION\u GET\u CONTENT使用Uri来选择文件。我认为我创建的文件是错误的,但这对本地文件或驱动器文件不完全有效。如果有人能解释如何解决从不依赖于文件来源的文件中获取信息的问题,这就是我正在寻找的方法 private FileData getFileDataFromUri(Uri uri){ //get file from uri File file =

使用此方法时,我得到的值为0。我认为问题在于如何创建文件。我希望能够通过Intent.ACTION\u GET\u CONTENT使用Uri来选择文件。我认为我创建的文件是错误的,但这对本地文件或驱动器文件不完全有效。如果有人能解释如何解决从不依赖于文件来源的文件中获取信息的问题,这就是我正在寻找的方法

   private FileData getFileDataFromUri(Uri uri){
        //get file from uri
        File file = new File(uri.getPath());

        //initialize variables
        FileData thisFileData = new FileData();
        thisFileData.sizeInBytes = (int) file.length();
        thisFileData.fileName = file.getName();
        thisFileData.path = file.getPath();
        byte[] bytes = new byte[thisFileData.sizeInBytes];

        //get all bytes of file
        try {
            BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(file));
            buffer.read(bytes, 0,bytes.length);
            buffer.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
            Log.e("getBinaryDataFromUri", e+"");
            thisFileData.errorCode = 1;
            return thisFileData;
        } catch (IOException e) {
            e.printStackTrace();
            Log.e("getBinaryDataFromUri", e+"");
            thisFileData.errorCode = 1;
            return thisFileData;
        }
        //convert bytes array to string
        thisFileData.bytes = new String(bytes);

        //return
        return thisFileData;
    }
fileData类只是文件中的信息,我需要用它做很多事情,下面是它的内容:

public class FileData   {
        int errorCode = 0;
        int sizeInBytes = 0;
        String fileName = "";
        String bytes = "";
        String path = "";
    }
我最初调用的目的是获取发送给函数getFileDataFromUri(uri)的uri

我希望能够通过Intent.ACTION\u GET\u CONTENT使用Uri选择文件


,而不是HTTP URL。使用
ContentResolver
openInputStream()
读取与
Uri
相关联的流,您可以从
ACTION\u get\u CONTENT

获得该流,感谢您现在查看它。看起来很有希望,但是有很多代码是正确的。
public void selectDocument()  {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT), chooser = null;
    intent.setType("*/*"); //iOS uses "application/octet-stream"
    chooser = Intent.createChooser(intent, "Find file...");
    startActivityForResult(chooser, PICK_FILE_REQUEST);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)   {
    if(requestCode == PICK_FILE_REQUEST){
        if(resultCode == Activity.RESULT_OK){
            Uri fullUri = data.getData();
            selectPrinter(fullUri);
        }
    }
}