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

标签 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

最佳答案

我相信您的手机上不存在文件“/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/

相关文章:

java - 可以在 hibernate 状态 "and"中使用 "case when...then...else...end"吗?

java - 计算空格的问题 - Java

java - 为什么尝试打印未初始化的变量并不总是导致错误消息

Android Nougat 忽略位于 res/values-zh-rTW 中的字符串资源

regex - 在 bash 中检查文件的正则表达式

c++ - 将字符串添加到文件而不覆盖以前的字符串

java - hudson 版本上的 Cargo maven 插件问题

android - 如何确定 Android OpenGL ES 上的最大纹理内存

正确使用 Stat on C

android - 有没有办法知道设备中蓝牙芯片的详细信息?