问题“如何逐行读取本地(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,但我似乎无法弄清楚如何。我在这里查看了几个问题,并多次提到上面链接的页面。
如果有人能看到我做错了什么,我会非常感谢你的帮助。如果我为这类任务完全咆哮错误的树,我为浪费时间而道歉,但是一些指南或推荐给适当的教程资源将非常感激。我花了最近两天试图找出这些错误。
答案 0 :(得分: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上观看一些视频以获得对该语言的一般感觉,但我希望这有助于您理解错误的位置。