You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio致命异常求助:读取Assets文件夹TXT文件时APP崩溃

嘿,作为Java和Android Studio的新手,遇到点击按钮就崩溃的情况真的太常见啦!我刚入门的时候也踩过不少类似的坑,帮你一步步排查解决~

常见崩溃原因及修复方案

1. 没处理IO异常,直接崩溃

读取Assets里的文件属于IO操作,很容易因为文件找不到、读取失败等抛出异常,如果没加try-catch捕获,APP直接就崩了。这是新手最容易忽略的点!

给你个靠谱的读取文件示例代码:

// 把读取文件的逻辑单独抽成方法,更清晰
private List<String> loadTxtLines() {
    List<String> allLines = new ArrayList<>();
    BufferedReader reader = null;
    try {
        // 打开assets里的"基础.txt",注意文件名要完全匹配,大小写也不能错!
        InputStream inputStream = getAssets().open("基础.txt");
        reader = new BufferedReader(new InputStreamReader(inputStream));
        
        String singleLine;
        // 逐行读取存入列表
        while ((singleLine = reader.readLine()) != null) {
            allLines.add(singleLine);
        }
    } catch (IOException e) {
        // 打印异常信息方便你排查,也可以弹个Toast提示自己
        e.printStackTrace();
        Toast.makeText(this, "文件读取失败啦", Toast.LENGTH_SHORT).show();
    } finally {
        // 一定要记得关闭流,避免资源泄漏
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return allLines;
}

2. 空指针搞事情!

这也是崩溃的重灾区,常见两种情况:

  • 控件没绑定对:你得确保在onCreate里用findViewById正确找到了TextView和Button,别写错ID!比如:
TextView showResultTv;
Button getRandomBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); // 先加载布局,这个不能忘!

    // 替换成你布局文件里对应的控件ID
    showResultTv = findViewById(R.id.tv_result);
    getRandomBtn = findViewById(R.id.btn_get_random);

    // 给按钮加点击事件
    getRandomBtn.setOnClickListener(v -> {
        List<String> lines = loadTxtLines();
        // 先判断列表不为空,不然取随机数会崩!
        if (!lines.isEmpty()) {
            Random random = new Random();
            String randomLine = lines.get(random.nextInt(lines.size()));
            showResultTv.setText(randomLine);
        } else {
            showResultTv.setText("文件是空的或者读失败了😢");
        }
    });
}
  • 文件读出来是空列表:如果你的基础.txt是空的,调用random.nextInt(lines.size())会因为size()为0抛异常,所以一定要先判断列表是否为空!

3. 文件名/路径搞错了

Android对Assets里的文件名大小写是敏感的!比如你存的是基础.TXT,代码里写基础.txt就会找不到文件。另外如果文件放在Assets的子文件夹里,要写成getAssets().open("子文件夹名/基础.txt")

最后一招:看崩溃日志找根源

如果还是崩,打开Android Studio的Logcat,过滤“Error”级别,或者直接搜你的MainActivity类名,就能看到具体的崩溃原因(比如NullPointerException、FileNotFoundException),对着报错的行数改就行,这是排查问题最快的方法!

内容的提问来源于stack exchange,提问作者jagged_prospect

火山引擎 最新活动