Package io.rong.common

## Class FileUtils

- All Implemented Interfaces:

      public class FileUtils

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `public final static int` | `FILE_SCHEME_LENGTH` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---

  - ### Enum Constant Summary

    Enum Constants
    Enum Constant | Description
    --- | ---

  - ### Method Summary

    Modifier and Type | Method | Description
    --- | --- | ---
    `static InputStream` | `getFileInputStream(String path)` | 创建一个指向文件的输入流，即将该文件内容读到内存中
    `static Array<byte>` | `getByteFromUri(Uri uri)` | 以字节为单位读取文件，常用于读二进制文件，如图片、声音、影像等文件。
    `static void` | `writeByte(Uri uri, Array<byte> data)` | 将 byte 数组顺序写入到文件输出流中
    `static File` | `convertBitmap2File(Bitmap bm, String dir, String name)` | 图片转化成文件
    `static File` | `copyFile(File src, String path, String name)` | 复制文件
    `static boolean` | `copyFile(String srcPath, String path, String name)` | 复制文件,仅支持file开头
    `static boolean` | `copyFileToInternal(Context context, Uri srcUri, String desPath, String name)` |
    `static boolean` | `copyFile(Context context, Uri srcUri, String desPath)` |
    `static String` | `getFileNameWithPath(String path)` | 根据文件路径获取文件名
    `static String` | `extractFileNameWithoutPrefix(String path)` | 根据文件路径获取文件名
    `static String` | `getDirPathWithPath(String path)` | 从完整文件路径中提取所在目录路径
    `static Array<byte>` | `file2byte(File file)` | 获得指定文件的 byte 数组
    `static Array<byte>` | `file2byte(Context context, Uri uri)` |
    `static Array<byte>` | `contentFile2byte(Context context, Uri uri)` | 获得指定文件的 byte 数组，必须是content开头
    `static File` | `byte2File(Array<byte> buf, String filePath, String fileName)` | 根据 byte 数组，生成文件
    `static String` | `getCachePath(Context context)` | 获取缓存存储路径，如 `/sdcard/Android/data/<package name>/cache`
    `static String` | `getFileKey(Message message)` | 获取媒体消息的key，用于 图片，视频，gif 等消息的 handler
    `static String` | `getCachePath(Context context, String dir)` | 获取缓存存储路径，如 `/sdcard/Android/data/<package name>/cache/<dir>`
    `static String` | `getCacheDirsPath(Context context, String dir)` | 获取缓存存储路径，如 `/sdcard/Android/data/<package name>/cache/<dir>`
    `static String` | `getTempFilePath(Context context, int messageId)` | 获取断点续传临时文件存储路径
    `static String` | `getTempFilePath(Context context, String id)` | 获取断点续传临时文件存储路径
    `static String` | `getInternalCachePath(Context context, String dir)` | 获取 app 缓存存储路径 `data/data/<package name>/cache/<dir>`
    `static String` | `getMediaDownloadDir(Context context)` | 获取媒体文件存储路径
    `static String` | `getMediaDownloadDir(Context context, String dir)` | 获取媒体文件存储路径
    `static long` | `getFileSize(File file)` | 获取指定文件大小
    `static void` | `saveFile(String str, String filePath)` | 把字符串存到指定路径下
    `static String` | `getStringFromFile(String path)` | 获取文件数据
    `static void` | `removeFile(String path)` | 删除文件
    `static String` | `getTempFileMD5(Context context, int messageId)` | 获取文件断点续传 MD5 Key 值, 用来标识正在下载的文件 根据 appKey , userId 和 messageId 做 MD5
    `static String` | `getTempFileMD5(Context context, String tag)` | 获取文件断点续传临时文件名, 用来标识正在下载的文件 根据 appKey , userId 和唯一标识 tag 做 MD5
    `static int` | `readPictureDegree(Context context, String path)` | 读取图片旋转的角度
    `static boolean` | `isFileExistsWithUri(Context pContext, Uri pUri)` | 文件是否存在
    `static long` | `getFileLengthWithUri(Context pContext, Uri pUri)` | 获取文件长度，不存在返回-1
    `static boolean` | `isValidateLocalUri(Uri pUri)` | 文件 Uri Scheme 是否以 file 或者 content 开头
    `static boolean` | `uriStartWithFile(Uri pUri)` | 文件 Uri Scheme 是否以 file 开头且文件 Uri 长度超过 7
    `static boolean` | `uriStartWithContent(Uri srcUri)` | 文件 Uri Scheme 是否以 content 开头
    `static String` | `getSuffix(Uri srcUri)` | 获取Uri后缀
    `static String` | `getSuffix(String path)` | 获取Uri后缀
    `static FileInfo` | `getFileInfoByUri(Context context, Uri uri)` | 通过 uri 获取文件名称，大小，类型
    `static FileInfo` | `getFileInfoByFile(File file)` | 通过 file 获取文件名称，大小，类型
    `static String` | `getFileTypeFromInputStream(InputStream inputStream)` | 从 input 流中获取文件类型
    `static String` | `getFileTypeFromByteData(Array<byte> data)` |
    `static InputStream` | `getFileInputStream(Context context, Uri uri)` |
    `static File` | `getExternalCacheDir(Context context)` | 9.
    `static String` | `generateKey()` |
    `static String` | `getJsonOutPath(Context context)` |
    `static String` | `sanitizeFilename(String displayName)` | 对文件名进行清理，防止路径遍历攻击
    `static String` | `getUrlFileName(String url, String fileName)` |
    `static String` | `getFileNameWithUrl(String urlString, String uniqueId, String suffix)` |
    `static String` | `getNextAvailableFilePath(String fileName, String directoryPath)` | 如果 directoryPath 中存在 fileName 文件， 则生成 file(1).

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

  - ### Method Detail

    - #### getFileInputStream

           static InputStream getFileInputStream(String path)

      创建一个指向文件的输入流，即将该文件内容读到内存中

      Parameters:
        `path` - 文件路径
      Returns:

        指向文件的输入流，即将该文件内容读到内存中

    - #### getByteFromUri

           static Array<byte> getByteFromUri(Uri uri)

      以字节为单位读取文件，常用于读二进制文件，如图片、声音、影像等文件。

      Parameters:
        `uri` - 文件地址
      Returns:

        读取字节流

    - #### writeByte

           static void writeByte(Uri uri, Array<byte> data)

      将 byte 数组顺序写入到文件输出流中

      Parameters:
        `uri` - 文件 Uri
        `data` - byte 数组

    - #### convertBitmap2File

           static File convertBitmap2File(Bitmap bm, String dir, String name)

      图片转化成文件

      Parameters:
        `bm` - 图片
        `dir` - 图片存储路径
        `name` - 图片名
      Returns:

        文件

    - #### copyFile

           static File copyFile(File src, String path, String name)

      复制文件

      Parameters:
        `src` - 源文件
        `path` - 目标文件路径
        `name` - 目标文件名
      Returns:

        目标文件

    - #### copyFile

           static boolean copyFile(String srcPath, String path, String name)

      复制文件,仅支持file开头

      Parameters:
        `srcPath` - 源文件路径
        `path` - 目标文件路径
        `name` - 目标文件名
      Returns:

        返回是否成功拷贝

    - #### copyFileToInternal

           static boolean copyFileToInternal(Context context, Uri srcUri, String desPath, String name)

      Parameters:
        `context` - 上下文
        `srcUri` - file 或 content 开头
        `desPath` - 包名下存储的路径 "stroage://开头"文件路径（必须为可直接操作包名下路径）
      Returns:

        拷贝到包名下后文件

    - #### copyFile

           static boolean copyFile(Context context, Uri srcUri, String desPath)

      Parameters:
        `context` - 上下文
        `srcUri` - 通过 MediaStore 获取到的 uri_sdk29,"content://开头" 文件路径
        `desPath` - 包名下存储的路径 "stroage://开头"文件路径（必须为可直接操作包名下路径）
      Returns:

        拷贝到包名下后文件

    - #### getFileNameWithPath

           static String getFileNameWithPath(String path)

      根据文件路径获取文件名

      Parameters:
        `path` - 文件路径
      Returns:

        文件名

    - #### extractFileNameWithoutPrefix

           static String extractFileNameWithoutPrefix(String path)

      根据文件路径获取文件名

      Parameters:
        `path` - 文件路径
      Returns:

        文件名

    - #### getDirPathWithPath

           static String getDirPathWithPath(String path)

      从完整文件路径中提取所在目录路径

      Parameters:
        `path` - 完整文件路径（如：/storage/emulated/0/Download/test.
      Returns:

        文件所在目录路径（如：/storage/emulated/0/Download/） 如果输入为空或无效路径，返回空字符串

    - #### file2byte

           static Array<byte> file2byte(File file)

      获得指定文件的 byte 数组

      Parameters:
        `file` - 指定文件
      Returns:

        指定文件的 byte 数组

    - #### file2byte

           static Array<byte> file2byte(Context context, Uri uri)

    - #### contentFile2byte

           static Array<byte> contentFile2byte(Context context, Uri uri)

      获得指定文件的 byte 数组，必须是content开头

      Parameters:
        `context` - 上下文
        `uri` - content路径
      Returns:

        指定文件的 byte 数组

    - #### byte2File

           static File byte2File(Array<byte> buf, String filePath, String fileName)

      根据 byte 数组，生成文件

      Parameters:
        `buf` - byte 数组
        `filePath` - 文件存放路径
        `fileName` - 文件名
      Returns:

        生成的文件

    - #### getCachePath

           static String getCachePath(Context context)

      获取缓存存储路径，如 `/sdcard/Android/data/<package name>/cache`

      Parameters:
        `context` - 传入的 Context
      Returns:

        目录的完整路径，外置存储未加载或出现其他错误时返回空字符串 ""

    - #### getFileKey

           static String getFileKey(Message message)

      获取媒体消息的key，用于 图片，视频，gif 等消息的 handler

      Parameters:
        `message` - 消息
      Returns:

        媒体消息的key，用于本地存储

    - #### getCachePath

           static String getCachePath(Context context, String dir)

      获取缓存存储路径，如 `/sdcard/Android/data/<package name>/cache/<dir>`

      Parameters:
        `context` - 传入的 Context
        `dir` - 自定义目录
      Returns:

        目录的完整路径，外置存储未加载或出现其他错误时返回空字符串 ""

    - #### getCacheDirsPath

           static String getCacheDirsPath(Context context, String dir)

      获取缓存存储路径，如 `/sdcard/Android/data/<package name>/cache/<dir>`

      Parameters:
        `context` - 传入的 Context
        `dir` - 自定义目录(多级目录)
      Returns:

        目录的完整路径，外置存储未加载或出现其他错误时返回空字符串 ""

    - #### getTempFilePath

           static String getTempFilePath(Context context, int messageId)

      获取断点续传临时文件存储路径

      Parameters:
        `context` - 上下文
        `messageId` - 消息 id
      Returns:

        保存路径

    - #### getTempFilePath

           static String getTempFilePath(Context context, String id)

      获取断点续传临时文件存储路径

      Parameters:
        `context` - 上下文
        `id` - 文件唯一标识
      Returns:

        保存路径

    - #### getInternalCachePath

           static String getInternalCachePath(Context context, String dir)

      获取 app 缓存存储路径 `data/data/<package name>/cache/<dir>`

      Parameters:
        `context` - 传入的 Context
        `dir` - 自定义目录
      Returns:

        目录的完整路径

    - #### getMediaDownloadDir

          @Deprecated() static String getMediaDownloadDir(Context context)

      获取媒体文件存储路径

      Parameters:
        `context` - 上下文
      Returns:

        媒体文件存储路径

    - #### getMediaDownloadDir

           static String getMediaDownloadDir(Context context, String dir)

      获取媒体文件存储路径

      Parameters:
        `context` - 上下文
        `dir` - 自定义目录
      Returns:

        媒体文件存储路径

    - #### getFileSize

           static long getFileSize(File file)

      获取指定文件大小

      Parameters:
        `file` - 指定文件
      Returns:

        文件长度

    - #### saveFile

           static void saveFile(String str, String filePath)

      把字符串存到指定路径下

      Parameters:
        `str` - 要存储的字符串
        `filePath` - 指定路径

    - #### getStringFromFile

           static String getStringFromFile(String path)

      获取文件数据

      Parameters:
        `path` - 文件路径
      Returns:

        获取文件数据

    - #### removeFile

           static void removeFile(String path)

      删除文件

      Parameters:
        `path` - 文件路径

    - #### getTempFileMD5

           static String getTempFileMD5(Context context, int messageId)

      获取文件断点续传 MD5 Key 值, 用来标识正在下载的文件 根据 appKey , userId 和 messageId 做 MD5

      Parameters:
        `context` - 上下文
        `messageId` - 消息 id
      Returns:

        保存路径

    - #### getTempFileMD5

           static String getTempFileMD5(Context context, String tag)

      获取文件断点续传临时文件名, 用来标识正在下载的文件 根据 appKey , userId 和唯一标识 tag 做 MD5

      Parameters:
        `context` - 上下文
        `tag` - 文件唯一标识
      Returns:

        保存路径

    - #### readPictureDegree

           static int readPictureDegree(Context context, String path)

      读取图片旋转的角度

      Parameters:
        `context` - 上下文
        `path` - 图片绝对路径
      Returns:

        degree 旋转的角度

    - #### isFileExistsWithUri

           static boolean isFileExistsWithUri(Context pContext, Uri pUri)

      文件是否存在

      Parameters:
        `pContext` - 上下文
        `pUri` - 文件 Uri
      Returns:

        文件是否存在。`true` 存在，`false` 不存在。

    - #### getFileLengthWithUri

           static long getFileLengthWithUri(Context pContext, Uri pUri)

      获取文件长度，不存在返回-1

      Parameters:
        `pContext` - 上下文
        `pUri` - 文件 Uri
      Returns:

        文件存在返回文件长度。

    - #### isValidateLocalUri

           static boolean isValidateLocalUri(Uri pUri)

      文件 Uri Scheme 是否以 file 或者 content 开头

      Parameters:
        `pUri` - 文件 Uri
      Returns:

        文件 Uri Scheme 是否以 file 或 content 开头

    - #### uriStartWithFile

           static boolean uriStartWithFile(Uri pUri)

      文件 Uri Scheme 是否以 file 开头且文件 Uri 长度超过 7

      Parameters:
        `pUri` - 文件 Uri
      Returns:

        文件 Uri Scheme 是否以 file 开头且文件 Uri 长度超过 7

    - #### uriStartWithContent

           static boolean uriStartWithContent(Uri srcUri)

      文件 Uri Scheme 是否以 content 开头

      Parameters:
        `srcUri` - 文件 Uri
      Returns:

        文件 Uri Scheme 是否以 content 开头

    - #### getSuffix

           static String getSuffix(Uri srcUri)

      获取Uri后缀

      Parameters:
        `srcUri` - 文件 Uri
      Returns:

        后缀可能为空

    - #### getSuffix

           static String getSuffix(String path)

      获取Uri后缀

      Parameters:
        `path` - path
      Returns:

        后缀可能为空

    - #### getFileInfoByUri

           static FileInfo getFileInfoByUri(Context context, Uri uri)

      通过 uri 获取文件名称，大小，类型

      Parameters:
        `context` - 上下文
        `uri` - 支持 content和 File 开头
      Returns:

        ContentDocument 返回文件名称，大小，类型

    - #### getFileInfoByFile

           static FileInfo getFileInfoByFile(File file)

      通过 file 获取文件名称，大小，类型

      Returns:

        ContentDocument 返回文件名称，大小，类型

    - #### getFileTypeFromInputStream

           static String getFileTypeFromInputStream(InputStream inputStream)

      从 input 流中获取文件类型

      Parameters:
        `inputStream` - 输入流

    - #### getFileTypeFromByteData

           static String getFileTypeFromByteData(Array<byte> data)

    - #### getFileInputStream

           static InputStream getFileInputStream(Context context, Uri uri)

    - #### getExternalCacheDir

           static File getExternalCacheDir(Context context)

      9.0以下 getExternalCacheDir 有可能出现ArrayIndexOutOfBoundsException异常，需要捕获

    - #### generateKey

           static String generateKey()

    - #### getJsonOutPath

           static String getJsonOutPath(Context context)

    - #### sanitizeFilename

           static String sanitizeFilename(String displayName)

      对文件名进行清理，防止路径遍历攻击

      Parameters:
        `displayName` - 文件名
      Returns:

        清理后的文件名

    - #### getUrlFileName

           static String getUrlFileName(String url, String fileName)

    - #### getFileNameWithUrl

           static String getFileNameWithUrl(String urlString, String uniqueId, String suffix)

    - #### getNextAvailableFilePath

           static String getNextAvailableFilePath(String fileName, String directoryPath)

      如果 directoryPath 中存在 fileName 文件， 则生成 file(1).png，以此类推

      Parameters:
        `fileName` - 文件名称
        `directoryPath` - 存储目录
      Returns:

        重命名后的文件路径