从包中包含的文件位置读取

时间:2013-08-01 19:31:42

标签: java android file exception

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

1 个答案:

答案 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);
 }