问题"如何逐行读取本地(res/raw)文件?"处理了类似的问题,但我无法根据那里提供的答案构建解决方案。我确实得到了一条非常有用的信息(DataInputStream类,它有一个readLine方法),我一直在开发人员网站上对此进行研究,并试图使其发挥作用。
我试图做的是将存储在文本文件的连续行中的信息读取到字符串数组中,这样第一行是第一个数组元素,第二行是下一个数组元素等等…然后这个字符串数组将用于填充打开的下一个活动中的文本字段。这一切都发生在开关案例中(取决于案例,即选择哪个列表项,加载不同的文本文件)。以下是我目前所拥有的:
//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();
}
}
}
到目前为止,除了这些错误,编辑还可以接受,而且我没有足够的经验来理解它们。我理解他们在说什么,但不知道如何解决。错误出现在switch案例中,我试图设置输入流并分配值。最重要的是,在执行readLine命令的行中,我得到:"-未定义类型DataInputStream的方法readLine"-对于类型InputStream",方法readLine未定义
我不明白,因为如果我没有错的话,上面写着(http://developer.android.com/reference/java/io/DataInputStream.html)DataInputStream类具有可用的readLine方法(我从上面提到的问题中了解到这一点)。显然,我没有正确使用DataInputStream,但我似乎不知道如何使用。我已经看了这里的几个问题,并多次提到上面链接的页面。
如果有人能看出我做错了什么,我将非常感谢你的帮助。如果我对这类任务完全听错了,我很抱歉浪费时间,但如果能提供一些指导方针或推荐合适的教程资源,我将不胜感激。我花了两天时间试图找出这些错误。
好吧,这里没有其他人帮助过你。。。给你。
从本质上讲,您对如何使用API类的理解出现了错误。
您的代码正试图定义DataInputStream类。您希望使用API已经提供的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方法将元素添加到数组列表中。我们会一次搞定的,别担心,我会在。。。
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()])
您现在有了所需的输出。我建议在安卓系统上看一些视频,对语言有一个大致的了解,但我希望这能帮助你找出错误所在。