0

我有一个 .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

4

1 回答 1

2

我相信您的手机上不存在文件“/home/scibor/coding/src/com/myapp/readThis.txt”(并且有充分的理由)。您需要将 .txt 作为资产添加到项目中并使用AssetManager.open() -方法加载它

编辑:

在您编辑的代码中,您NullPointerException是由您在每次迭代中调用 .readLine() 两次引起的。

解决方案:

String line = null;
while(true){
     line = reader.readLine();
     if (line == null) break;
     sorted.add(line);
 }
于 2013-08-01T19:45:16.890 回答