Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android从Uri获取实际路径和文件名_Android_Hash - Fatal编程技术网

Android从Uri获取实际路径和文件名

Android从Uri获取实际路径和文件名,android,hash,Android,Hash,Retrurns/external/file/59但我需要/sdcard/downloads/…+文件名 我需要这个,因为我想得到一个sha-1,md5,。。。任何文件的哈希。 如果我使用“/external/file/xx”,它会给我一个FileNotFoundException。 我尝试了一些已经提出的解决方案,但似乎没有一个对我有效,或者我不知道如何使用它 Retrurns/external/file/59 这是因为您没有查看Uri的方案getPath()仅当方案是文件时才有意义。使用文件

Retrurns/external/file/59但我需要/sdcard/downloads/…+文件名
我需要这个,因为我想得到一个sha-1,md5,。。。任何文件的哈希。
如果我使用“/external/file/xx”,它会给我一个FileNotFoundException。
我尝试了一些已经提出的解决方案,但似乎没有一个对我有效,或者我不知道如何使用它

Retrurns/external/file/59

这是因为您没有查看
Uri
的方案
getPath()
仅当方案是
文件时才有意义。使用
文件
方案很少会得到
Uri
。通常,它将有一个
内容
方案,在这种情况下,路径对您来说毫无意义

我需要这个,因为我想得到一个sha-1,md5,。。。任何文件的哈希

使用
ContentResolver
openInputStream()
Uri
标识的内容上获取
InputStream
。将该
InputStream
传递给

public void fileSearching(){
    try{
        // find1, find2 are buttons that open the file explorer
        find1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                Intent i = new Intent();
                i.setAction(Intent.ACTION_GET_CONTENT);
                i.setType("file/*");
                check = 0;
                startActivityForResult(i, CODE);
            }
        });
        find2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent();
                i.setAction(Intent.ACTION_GET_CONTENT);
                i.setType("file/*");
                check = 1;
                startActivityForResult(i, CODE);
            }
        });
    }
    catch (Exception ex){}
}
@Override
public void onActivityResult(int request, int result, Intent data){
    if (request == CODE && result == RESULT_OK){
        Uri u = data.getData();
        String path = data.getData().getPath();
    }
}