Android文件存储选项/约定

Android文件存储选项/约定,android,filesystems,Android,Filesystems,所以我正在制作这个android应用程序,它需要从用户提供的CSV文件中读取数据 CSV文件在台式计算机上编辑更方便,因此我在应用程序中没有编辑器,这是“只读”的;我猜手机的SD卡上有一个文件 之后,我设法编写了一个哑版本,从外部存储读取文件,硬编码相对于getExternalStorageDirectory返回的文件夹位置。因此,目前我有: private static final String CSV_FILE = "/Android/foo/bar.csv" ... File f =

所以我正在制作这个android应用程序,它需要从用户提供的CSV文件中读取数据

CSV文件在台式计算机上编辑更方便,因此我在应用程序中没有编辑器,这是“只读”的;我猜手机的SD卡上有一个文件

之后,我设法编写了一个哑版本,从外部存储读取文件,硬编码相对于getExternalStorageDirectory返回的文件夹位置。因此,目前我有:

 private static final String CSV_FILE = "/Android/foo/bar.csv"
 ...
 File f = new File(Environment.getExternalStorageDirectory(), CSV_FILE);
然后我将我的手机连接到电脑,在“/Android”文件夹中创建一个“foo”文件夹(存在于我的手机上),复制“bar.csv”文件,一切都会正常进行

现在很明显,如果我想分发应用程序,这是不可接受的。所以我有几个问题:

  • 自然的解决方案是对文件位置进行软编码,在任何其他系统中,我都会依靠内置的“文件管理器”或其他东西,让用户浏览到正确的文件。 令人惊讶的是,我找不到这样的控件,而且似乎有很多第三方文件浏览器应用程序。这是否意味着要求用户选择手机上的文件不是“习惯”做法?我应该编写自己的“文件浏览器”吗

  • 关于如何命名我的“foo”dir,有没有约定?我见过应用程序用一个看起来像java包的名称创建目录,我是不是把它错当成了内部存储

  • 还有一个getExternalStoragePublicDirectory方法,它接受一个“目录类型”常量。在我的情况下,假设文件在目录\u下载中(或在目录\u下载的某些子文件夹中)是否有意义

  • 我应该为lambda用户如何在手机上放置文件而烦恼吗?对我来说,将手机插入PC非常简单,但这对所有机器人来说真的很容易吗

抱歉,如果这一切听起来都很琐碎,我只是想在做蠢事之前澄清一下我的想法

谢谢

这是否意味着要求用户选择手机上的文件不是“习惯”做法

正确。Android和iOS一样,尽量远离“文件”

我应该编写自己的“文件浏览器”吗

当然有很多用于文件浏览的第三方应用程序,其中一些支持
ACTION\u PICK
或类似操作(例如,OI file Manager)。如果没有人为此编写可重用组件,我会感到惊讶

关于如何命名我的“foo”dir有什么约定吗?我见过一些应用程序用一个看起来像java包的名称来创建dir,我是不是把它错当成了内部存储

<>不,你可能看到了结果。如果你只支持API级别8或更高,我只是使用它。如果你支持Android的早期版本,你可以考虑为你的应用程序找到合适的目录,该目录将通过<代码> GeEutalFieldRes()/<代码>使用。“对于较旧的Android版本

还有一个getExternalStoragePublicDirectory方法,它接受一个“目录类型”常量。在我的情况下,假设文件在目录\u下载中(或在目录\u下载的某些子文件夹中)是否有意义

这是为了下载——更准确地说,是指用户下载的东西,他们希望独立于任何已安装的应用程序挂起。这听起来不适合您的场景

我是否应该为lambda用户如何在手机上放置文件而烦恼

什么是“lambda用户”?引用吟游诗人的话,“但是,就我而言,它对我来说是希腊语”:-)

对我来说,把手机插到我的电脑上很简单,但这对所有机器人来说真的很容易吗

在Android 3.x及更高版本上,这有点更痛苦,因为Android已经从USB大容量存储模式(比如USB拇指驱动器)转向MTP(比如MP3播放器)用于其USB文件传输协议。虽然这有总体好处,但对OS X和Linux用户来说很烦人,因为它们都没有内置MTP支持。此外,它假设用户手边有USB电缆。您的总体设置还假设用户手边有桌面操作系统


如今,更多的开发者可能会选择创建Web应用程序而不是桌面应用程序,并通过互联网将数据同步到设备上。这样就无需对电缆大惊小怪,也不会将用户绑定到一个特定的“桌面”“用于数据输入的机器。但是,它确实需要访问Internet,这可能适合您的情况,也可能不适合您的情况。

谢谢!对于“希腊语”,一个“lambda用户”可能是一个法语表达的可怕翻译(我们说“un-usilizateur lambda”来表示“你的普通用户”。现在“你的普通用户”没有任何意义,因为没有人是“普通人”,但我想到的是一个典型的用户,他有一部电话、一台电脑和一根电缆,但不一定具备连接所有这些设备的技术。这仍然让我感到“不好”不过,解决方案是,因为为它设置一个webapp看起来真的太过分了。出于好奇,在我的add中嵌入一个编辑器并将所有内容存储在sqli db中会更有意义吗?@phtrivier:“在我的add中嵌入一个编辑器并将所有内容存储在sqli db中会更有意义吗?”--除非数据几乎无法在设备上输入,否则我至少可以选择一个应用程序内编辑器。毕竟,有些人有平板电脑或带有物理键盘的设备,或者其他使数据输入更容易的东西。“为其设置Web应用程序看起来真是太过分了”创建桌面应用程序不是吗?如果你打算通过电子表格进入CSV,考虑一下谷歌文档集成或类似Web的东西。是的,我计划让他们用EXCEL或任何东西编辑CSV。数据不是不可能进入手机上的,但那将是乏味的。(我的应用在平板电脑上毫无意义。)从没想过谷歌文档集成,你们有什么好的起点吗?谢谢