我有一个.txt文件,其中包含我想要存储在数组中的内容列表,并在整个应用程序中使用。为此,我创建了以下类:
public class Sort {
ArrayList<String> sorted = new ArrayList<String>();
public Sort() throws IOException {
Scanner scanner = new Scanner(new FileReader("/home/scibor/coding/src/com/myapp/readThis.txt"));
while(scanner.hasNextLine()){
sorted.add(scanner.nextLine());
}
}
}
所以我有一个带有大量内容的.txt文件,然后我专门为这种情况创建了这个类。现在,当我想在我的其他类中的ArrayList中的.txt文件中访问这些内容时,我想:
Sort sort = new Sort();
sort.sorted; //can use the arrayList like so
相反,我收到一条说UnhandledException: java.io.IOException
我尝试了几种使用try / catch,BufferedReader和try / catch / finally的变体,最终所有这些都有一些与通过读取文件引发的异常有关的错误。我在这里做错了什么?
编辑:根据其中一条建议,我尝试了一种截然不同的方法,如下所示:
public class Sort {
List<String> sorted;
public Sort(Context context){
sorted = new ArrayList<String>();
AssetManager assetManager = context.getAssets();
try {
InputStream read = assetManager.open("readThis.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(read));
while(reader.readLine() != null){
sorted.add(reader.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这似乎让我更进一步,可能非常接近正确答案。当我创建Sort mySortedObject = new Sort(this);
时,没有生成错误。当我最终访问ArrayList时,如下所示:
for(String name: mySortedObject.sort){
if(name.equals("Whatever"){
//run this
}
}
}
我在包含if
语句的行上得到NullPointerException。所以对象已成功创建......但不完全?
编辑:“readThis.txt”文件位于/assets
答案 0 :(得分:2)
我相信手机上不存在“/home/scibor/coding/src/com/myapp/readThis.txt”文件(并且有充分理由)。您需要将.txt作为资产添加到项目中,并使用AssetManager.open() - 方法
加载它编辑:
在您编辑的代码中,NullPointerException
是由每次迭代中调用两次.readLine()引起的。{/ p>
解决方案:
String line = null;
while(true){
line = reader.readLine();
if (line == null) break;
sorted.add(line);
}