gpt4 book ai didi

android-file - 有没有一种直接的方法可以从文件 Uri 中获取父目录的 Uri?

转载 作者:行者123 更新时间:2023-12-03 17:04:58 32 4
gpt4 key购买 nike

假设一个 Uri 可以是以下之一:

  • 来自存储访问框架的 DocumentFile 的 Uri(即 DocumentFile.getUri())。
  • 来自常规文件的 Uri(即 Uri.fromFile(File))

  • 在这两种情况下,它都指目录下的文件。

    有没有一种直接的方法来获取其父目录的 Uri 而不尝试两者中的每一个来查看哪个有效?

    [编辑]:
    以下是 SAF 的示例:

    乌里:
    content://com.android.externalstorage.documents/tree/0000-0000%3Atest/document/0000-0000%3Atest%2Ffoo%2FMovies%2FRR%20parking%20lot%20a%202018_02_22_075101.mp4

    获取路径():

    /tree/0000-0000:test/document/0000-0000:test/foo/Movies/RR parking lot a 2018_02_22_075101.mp4



    getPathSegments():
    0 = "tree"
    1 = "0000-0000:test"
    2 = "document"
    3 = "0000-0000:test/foo/Movies/RR parking lot a 2018_02_22_075101.mp4"

    父文件夹应该是 test/foo/Movies。

    以下是常规文件的示例:

    乌里:

    file:///storage/emulated/0/foo/Movies/RR%20parking%20lot%20a%202018_02_22_081351.mp4



    获取路径():

    /storage/emulated/0/foo/Movies/RR parking lot a 2018_02_22_081351.mp4



    getPathSegments():
    0 = "storage"
    1 = "emulated"
    2 = "0"
    3 = "foo"
    4 = "Movies"
    5 = "RR parking lot a 2018_02_22_081351.mp4"

    最佳答案

    晚了3年,我遇到了类似的问题。我已经使用 Android 26 API 解决了它DocumentsContract.findDocumentPath .对我来说没问题,因为我在项目中的早期 Android 版本上使用 File API。
    本质上,我使用 findDocumentPath 找到文档的路径并从中删除最后一段(即找到父目录的路径)。然后,为了改革 SAF Uri,我在 Uri 中找到最后一个/或 : 字符,并将下一部分替换为父目录的路径。

    public static String GetParentDirectory( ContentResolver resolver, String rawUri )
    {
    if( !rawUri.contains( "://" ) )
    {
    // This is a raw filepath, not a SAF path
    return new File( rawUri ).getParent();
    }

    // Calculate the URI's path using findDocumentPath, omit the last path segment from it and then replace the rawUri's path component entirely
    DocumentsContract.Path rawUriPath = DocumentsContract.findDocumentPath( resolver, Uri.parse( rawUri ) );
    if( rawUriPath != null )
    {
    List<String> pathSegments = rawUriPath.getPath();
    if( pathSegments != null && pathSegments.size() > 0 )
    {
    String rawUriParentPath;
    if( pathSegments.size() > 1 )
    rawUriParentPath = Uri.encode( pathSegments.get( pathSegments.size() - 2 ) );
    else
    {
    String fullPath = pathSegments.get( 0 );
    int separatorIndex = Math.max( fullPath.lastIndexOf( '/' ), fullPath.lastIndexOf( ':' ) + 1 );
    rawUriParentPath = separatorIndex > 0 ? Uri.encode( fullPath.substring( 0, separatorIndex ) ) : null;
    }

    if( rawUriParentPath != null && rawUriParentPath.length() > 0 )
    {
    int rawUriLastPathSegmentIndex = rawUri.lastIndexOf( '/' ) + 1;
    if( rawUriLastPathSegmentIndex > 0 )
    {
    String rawUriParent = rawUri.substring( 0, rawUriLastPathSegmentIndex ) + rawUriParentPath;
    if( !rawUriParent.equals( rawUri ) )
    return rawUriParent;
    }
    }
    }
    }

    return null;
    }

    关于android-file - 有没有一种直接的方法可以从文件 Uri 中获取父目录的 Uri?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48915273/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com