我很难执行应该是一项简单的任务。假设我有一个文本文件,其中指出:
a = b
我希望我的程序在用户输入“a”时读取此文件并输出“b”。在 Python 或 C++ 中,我可以在大约 7 行或更少的时间内完成此操作。
但是,我很难找到在 Android 上执行此操作的简单方法。例如,我在 SO 上找到的一个示例在 6 个文件中有近 900 行。
有没有一种简单的方法来解析文件并在我缺少的 Android 上返回一个变量?
BufferedReader r = new BufferedReader(new FileReader(filename));
string s;
while(s = r.readLine()) {
//Oh hey, I got a line out of the file.
//In three lines of code.
//So what's all this Android-bashing about?
}
只要您对a = b
属性文件中使用的格式感到满意,您就可以实现 99% 的目标
Properties properties = new Properties();
try {
properties.load(new FileInputStream(filename));
} catch (IOException e) {
// the file is missing or is not in 'a = b' format
}
得到一个key
包含用户字符串的变量后,如果文件包含该行"a"
,则结果properties.getProperty ( key )
将相等。我很确定你需要比 C++ 更多的东西来从文件加载地图并处理所有转义和字符编码问题。"b"
a = b
如果属性保存在Android 项目的assets文件夹中名为mappings.properties的文本文件中,而不是在用户的文件系统中,那么您可以这样处理:
final AssetManager am = getResources().getAssets();
final Properties properties = new Properties();
try {
properties.load( am.open("mappings.properties"));
} catch (IOException e) {
// the file is missing or is not in 'a = b' format
}
如果在编辑框中输入“a”,则从android 教程中借用下一点,以显示带有“b”的 toast 消息。也许这里是您获取行数的地方,因为与其他语言相比,使用 XML 文件设置 GUI 并在 Java 中添加侦听器相当冗长。这是由于 Java 和 XML 语法而不是虚拟机。
final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
Toast.makeText(YourOuterViewClass.this,
properties.getProperty(edittext.getText().toString()),
Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
你绝对不需要数百行代码来实现这一点。它可以在几行中完成。我不知道您在看什么示例,但它们的作用可能比您所描述的要多。