【问题标题】:Getting fileData from Uri (local, dropbox, drive, etc)从 Uri(本地、保管箱、驱动器等)获取文件数据
【发布时间】:2015-03-31 19:46:17
【问题描述】:

当我使用此方法时,我得到 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);
        }
    }
}

【问题讨论】:

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


    【解决方案1】:

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

    A Uri is not a file,不仅仅是一个 HTTP URL。使用ContentResolveropenInputStream() 读取与您从ACTION_GET_CONTENT 获得的Uri 关联的流。

    【讨论】:

    • 感谢现在调查。看起来很有希望,但要写很多代码。
    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    相关资源
    最近更新 更多