从Uri获取fileData(本地,dropbox,驱动器等)

时间:2015-02-01 21:15:57

标签: android file android-intent uri file-conversion

当我使用此方法时,我得到0值。我的问题在于我如何创建文件。我希望能够通过Intent.ACTION_GET_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)的uri的意图

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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  

我希望能够通过Intent.ACTION_GET_CONTENT使用Uri选择文件

A Uri is not a file,不仅仅是HTTP网址。使用ContentResolveropenInputStream()来读取与您从Uri获得的ACTION_GET_CONTENT相关联的信息流。