2

问题“如何逐行读取本地(res / raw)文件?” 处理类似的问题,但我无法根据那里提供的答案构建解决方案。我确实得到了一条非常有用的信息(具有 readLine 方法的 DataInputStream 类),我一直在开发者网站上对此进行研究并尝试使其工作。

我想要做的是将存储在文本文件的连续行中的信息读入字符串数组,这样第一行是第一个数组元素,第二行是下一个数组元素,等等......然后这个字符串数组将用于填充下一个打开的活动中的文本字段。这一切都发生在开关盒内(取决于情况,即选择了哪个列表项,加载了不同的文本文件)。这是我到目前为止所拥有的:

//Retrieve necessary text file for inputstream
InputStream buildinginfo = getResources().openRawResource(R.raw.testbuilding);
class DataInputStream extends FilterInputStream{
    protected DataInputStream(InputStream buildinginfo) {
        super(buildinginfo);
        // TODO Auto-generated constructor stub
        int i;  
        String[] building_info;
        //Assign lines of text to array
        for(i=0; i<5; i++){
            building_info[i] = buildinginfo.readLine();
        }
    }
}

到目前为止,除了这些错误之外,编辑器还可以,而且我没有足够的经验来理解它们。我明白他们在说什么,但不知道如何解决。错误位于我试图设置输入流并分配值的开关盒内的部分。最重要的是,在执行 readLine 命令的行中,我得到:“- 未定义类型 DataInputStream 的方法 readLine” “- 未定义类型 InputStream 的方法 readLine”

这我不明白,因为如果我没记错的话,这里(http://developer.android.com/reference/java/io/DataInputStream.html)说 DataInputStream 类有可用的 readLine 方法(我发现了关于这来自上面提到的问题)。显然我没有正确使用 DataInputStream,但我似乎无法弄清楚如何。我在这里查看了几个问题,并多次引用了上面链接的页面。

如果有人能看到我做错了什么,我将非常感谢您的帮助。如果我为这种类型的任务完全找错了树,我为浪费时间而道歉,但是非常感谢一些指导或推荐到适当的教程资源。我花了过去两天试图找出这些错误。

4

1 回答 1

11

好的,所以没有其他人在这里帮助过你……就这样吧。

从本质上讲,您对如何使用 API 类的理解出现了错误。

您的代码正在尝试定义DataInputStream 类。您想改用 API 已经提供的那个。通过重新定义类,您实际上是在屏蔽 API 类(您绝对不希望这样)。

因此,如果您查看 DataInputStream 的文档,您会看到一个构造函数。这允许您创建一个类的实例。这就是你想要的:)

InputStream buildinginfo = getResources().openRawResource(R.raw.testbuilding);
DataInputStream myDIS = new DataInputStream(buildinginfo);

//you've now got an instance of DataInputStream called myDIS

String firstString = myDIS.readLine();

//voila ... your firstString variable should contain some text

你的数组代码也有问题......但我不会以这种方式使用数组。

您应该使用 ArrayList,然后在 while 循环中读取这些行,这样您就不需要修改大小。

首先让我们摆脱这一行(我将其注释掉:

//String firstString = myDIS.readLine();

并创建一个 ArrayList 的实例,它是一个模板类,所以请注意String尖括号中的表示我们想要在我们的数组中使用哪种类型的元素:

ArrayList<String> list = new ArrayList<String>();

您可以使用 add 方法将元素添加到 arraylist。我们将一口气完成整个事情,别担心,我会在之后解释...

String myLine; //declare a variable

//now loop through and check if we have input, if so append it to list

while((myLine=myDIS.readline())!=null) list.add(myLine);

最后一行有点难懂,但是当您分配 myLine 变量时,它会返回一个结果,您可以将其与 NULL 进行比较……一旦读取最后一行,readline 函数将返回 null。while 循环的条件等于 false 并退出循环。

调用了一个简单的辅助函数toArray来将你的数组列表变成一个简单的数组。

String[] myStringArray = list.toArray(new String[list.size()])

您现在有了所需的输出。我建议在 Android 上观看一些视频以大致了解该语言,但我希望这有助于您了解错误所在。

于 2013-02-19T22:59:22.010 回答