-3

我很难执行应该是一项简单的任务。假设我有一个文本文件,其中指出:

a = b

我希望我的程序在用户输入“a”时读取此文件并输出“b”。在 Python 或 C++ 中,我可以在大约 7 行或更少的时间内完成此操作。

但是,我很难找到在 Android 上执行此操作的简单方法。例如,我在 SO 上找到的一个示例在 6 个文件中有近 900 行。

有没有一种简单的方法来解析文件并在我缺少的 Android 上返回一个变量?

4

3 回答 3

12
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?
}
于 2011-01-25T20:40:00.870 回答
4

只要您对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;
        }
    });
于 2011-01-25T21:49:53.423 回答
2

你绝对不需要数百行代码来实现这一点。它可以在几行中完成。我不知道您在看什么示例,但它们的作用可能比您所描述的要多。

于 2011-01-25T20:39:30.197 回答