【问题标题】:How do we get the file separators used by the different file systems?我们如何获得不同文件系统使用的文件分隔符?
【发布时间】:2012-03-05 20:13:22
【问题描述】:

大家下午好,

据我了解,Android 有(至少)2 个文件系统。一个用于“内部”存储(例如 /data 和 /system),另一个用于“外部”存储(例如 /mnt/sdcard),

这意味着当我们将文件保存到“内部”存储(Context.getFilesDirContext.getCacheDir)时,使用的文件分隔符可能与我们将文件保存到“外部”存储(Context.getExternalFilesDirContext.getExternalCacheDir)时不同, Environment.getExternalStoragePublicDirectory),但 java.io.File.separator 似乎只为我们提供了有关使用的“默认”文件系统的信息。

我们如何获取Android上不同文件系统使用的不同文件分隔符?

我试过java.nio.file.spi.FileSystemProvider.installedProviders(),但它看起来像android doesn't have this package

有没有办法获取 Android 上的文件系统列表?

【问题讨论】:

  • 是什么让你认为路径分隔符可以不同?总而言之,操作系统是 Linux,文件系统的东西由操作系统处理。
  • @EugeneMayevski'EldoSCorp 嗯,我听说将外部驱动器安装在 NTFS 上,这就是为什么我认为它们可以不同
  • 常识告诉我,驱动程序必须遵循其构建平台上的路径规则(至少在 Windows 和 MacOS X 上是这样),因此即使是 NTFS 驱动程序也可以使用正斜杠 (顺便说一句,它们在 Windows 上也有效)作为路径分隔符。而且大多数操作系统函数无论如何都只会处理正斜杠。
  • @EugeneMayevski'EldoSCorp 但是它不仅仅是文件分隔符,不同文件系统之间的文件分隔符(路径分隔符)也不同。
  • 不,他们不是。文件系统(数据结构)对路径分隔符一无所知。是司机做的。并且驱动程序必须遵循操作系统规则(它们可以与文件系统规则或限制相结合,但仍然必须遵循操作系统规则)。

标签: android filesystems


【解决方案1】:

据我了解,Android 有(至少)2 个文件系统。一个用于“内部”存储(例如 /data 和 /system),另一个用于“外部”存储(例如 /mnt/sdcard),

这对于 Android 1.x 和 2.x 来说是准确的。从 Android 3.0 开始,外部存储只是内部存储中的一个目录。

这意味着当我们将文件保存到“内部”存储(Context.getFilesDir,Context.getCacheDir)时,使用的文件分隔符可能与我们将文件保存到“外部”存储时不同

当然不是。分隔符是操作系统的功能,而不是文件系统。

有没有办法获取 Android 上的文件系统列表?

不支持任何内容。 SDK 应用程序应仅使用内部和外部存储,例如通过您在答案中引用的 API。

嗯,我听说将外部驱动器安装在 NTFS 上,这就是为什么我认为它们可以不同

你错了。文件和路径分隔符与文件系统的格式无关。

然而它不仅仅是文件分隔符,不同文件系统之间的文件分隔符(路径分隔符)也不同。

你错了。文件和路径分隔符与文件系统的格式无关。

【讨论】:

  • 感谢您简单易懂的回答 =)
【解决方案2】:

如果您担心在代码中放置硬编码的文件分隔符,可以使用 File.separator 代替硬编码的“/”。这将为您提供 Android 使用的文件分隔符,而无需担心下面的文件系统

【讨论】:

  • 简单而优雅
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
相关资源
最近更新 更多