我有一个 .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
最佳答案
我相信您的手机上不存在文件“/home/scibor/coding/src/com/myapp/readThis.txt”(并且有充分的理由)。您需要将 .txt 作为 Assets 添加到您的项目中,并使用 AssetManager.open() 加载它。 -方法
编辑:
在您编辑的代码中,您的 NullPointerException
是由您在每次迭代中调用 .readLine() 两次引起的。
解决方案:
String line = null;
while(true){
line = reader.readLine();
if (line == null) break;
sorted.add(line);
}
关于java - 从包中包含的文件位置读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18002930/