我理解这个问题之前可能已被多次询问,但我找不到满足我需求的例子。我曾经多次向StackOverflow提问,而且偶尔会有人在我这里寻求帮助之前要求我“去读书”或“做一些研究”。好吧,我已经做到了,而且我找不到足够的信息 - 所以如果你是其中一个人,如果你能指出我的资源,我会非常感激,所以我知道在哪里挖掘。
无论如何,我终于编写了一个计算带宽,链接速度和设备其他属性的应用程序。带宽每5秒刷新一次,链接速度和数据连接每秒刷新一次。目前,信息显示在屏幕上。
我正在尝试创建一个更大的计划项目,该项目涉及监视设备连接的另一台计算机(命令中心),为此,设备必须将这些值保存到可以是SSH的文本文件中由指挥中心提供。这个问题很简单;如何将数据写入文本文件?我知道如何用Java做到这一点;我可以使用FileOutputStream,或组合FileWriter + PrintWriter来实现类似的效果。但是,我不知道Android中的目录是如何工作的,我不确定在写入Android文件时是否有任何预防措施。我注意到我需要声明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
清单中的。还有什么我应该做的吗?另外,根据我的需要,有人可以推荐一种有效写入输出的方法吗? FileOutputStream是否可行,因为它似乎相当容易?我应该以特定方式对数据进行标记,例如使用制表符将其拆分吗?我是编程的新手,我还在学习,但我很感激一些有用读物的帮助或推荐。
This website,可能是首选阅读,目前正在下降。如果有人能给我提供一些例子,我们将不胜感激。
答案 0 :(得分:1)
Android目录的工作方式类似于PC目录,唯一的例外是您可以拥有不同的“根”目录,例如内部或外部存储。为了让它更加混乱,一些手机有一个内部SD卡 - 因此写入SD卡可能不是外部SD卡。在编写文本文件时,您可能希望保持灵活性 - 如果用户没有SD卡(外部存储),则需要更改游戏计划。有关检测SD卡的详细信息,请参阅this SO帖子。
至于文本文件的实际写作,它非常trivial:
编辑:您应该使用getExternalFilesDir(null)
来获取应用的绝对外部路径。您必须在活动内部调用此方法(或可以访问Context
对象)。
File file = new File(getExternalFilesDir(null), "stats.txt");
try
{
BufferedWriter buf = new BufferedWriter(new FileWriter(file));
buf.append(text);
buf.newLine();
buf.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
请注意,Android中有多种方法可以执行文件I / O,而这只是其中之一。 Here是另一篇详细介绍该问题的博客文章。
要存储您的数据,我会做两件事之一:
首先,您可以将数据存储为CSV(逗号分隔值)字符串,如下所示:
12,345,6,789
然后当你解析它时,你知道第一个数字是带宽,第二个是速度等。我宁愿使用逗号作为分隔符而不是制表符,因为我不喜欢使用空格作为分隔符
其次,您可以使用键/值对设置,如下所示:
bandwidth=12
speed=34
然后在解析代码中,您可以拆分=
字符。第一个字符串是键,第二个是值。
答案 1 :(得分:0)
在撰写本文时,您的链接似乎是针对不同的语言,并且该版本似乎已关闭。英语版本仍在运行,可在此处找到:http://developer.android.com/training/basics/data-storage/files.html
与此同时,我相信您必须访问包含您的文本文件的原始目录(如果您还没有,则在res目录中创建一个原始目录并将文本文件放在那里)。访问文本文件的代码是getResources().openRawResource(resourceName)
(如此问题中所述:https://stackoverflow.com/a/2856501/555544) - 我相信resourceName
是您的R文件中所述的文本文件的ID(例如: R.raw.foo
) - 这就是Android可以在您的目录中查找文件的方式。然后,像往常一样进行文件I / O.
让我知道事情的进展 - 我自己也在学习Android,但希望这指向正确的方向。