You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何读取TXT文件字符串?读取后存变量失败求助

Android中读取TXT文件字符串的问题解答

1. 如何在Android Studio中从TXT文件中获取字符串?

读取TXT文件得看文件的存储位置,常见有两种核心场景:

场景一:读取应用内部存储的文件(对应你第二个问题里的openFileInput)

这类文件是你通过openFileOutput保存到应用私有目录的文件,读取步骤清晰直接:

  • 打开文件输入流FileInputStream
  • 用InputStreamReader转成字符流
  • 读取字符到缓冲区,拼接成完整字符串

示例代码:

private String readInternalTxtFile(String fileName) {
    StringBuilder stringBuilder = new StringBuilder();
    try {
        FileInputStream fileIn = openFileInput(fileName);
        InputStreamReader inputReader = new InputStreamReader(fileIn);
        char[] inputBuffer = new char[1024]; // 可根据文件大小调整缓冲区大小
        int charRead;
        while ((charRead = inputReader.read(inputBuffer)) > 0) {
            stringBuilder.append(String.copyValueOf(inputBuffer, 0, charRead));
        }
        inputReader.close();
        fileIn.close();
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
    return stringBuilder.toString();
}

场景二:读取assets目录下的TXT文件

如果你的TXT文件放在src/main/assets目录下,读取方式略有不同:

private String readAssetsTxtFile(String fileName) {
    StringBuilder stringBuilder = new StringBuilder();
    try {
        InputStream inputStream = getAssets().open(fileName);
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line).append("\n"); // 保留换行符,不需要可去掉
        }
        reader.close();
        inputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
    return stringBuilder.toString();
}

2. 解决读取字符串无法存储到变量的问题

看你给出的代码片段,问题出在字符串拼接的逻辑错误:

  • 你一开始初始化s = String.valueOf(inputBuffer[0]),但此时inputBuffer是空的,这会导致s初始值是无效字符
  • 循环里的readstring没有拼接到s上(代码里的s...应该是没写完)

修正后的完整代码如下,我们用StringBuilder来高效拼接字符串(比直接用+=更高效,尤其适合大文件):

// 定义常量,可放在类内部
private static final int READ_BLOCK_SIZE = 1024;

// 读取并存储到变量的方法
private void readAndStoreTxt() {
    StringBuilder content = new StringBuilder(); // 用StringBuilder存储内容,避免频繁创建对象
    try {
        FileInputStream fileIn = openFileInput("mytextfile.txt");
        InputStreamReader inputRead = new InputStreamReader(fileIn);
        char[] inputBuffer = new char[READ_BLOCK_SIZE];
        int charRead;
        while ((charRead = inputRead.read(inputBuffer)) > 0) {
            String readString = String.copyValueOf(inputBuffer, 0, charRead);
            content.append(readString); // 把每次读取的片段拼接到content中
        }
        inputRead.close();
        fileIn.close();
        
        // 转成String变量,供后续使用
        String fileContent = content.toString();
        
        // 测试:Toast显示内容,同时可对fileContent做后续处理
        Toast.makeText(this, fileContent, Toast.LENGTH_LONG).show();
        
        // 这里写你的后续处理逻辑,比如解析、分割字符串等
        // processFileContent(fileContent);
        
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(this, "读取文件失败", Toast.LENGTH_SHORT).show();
    }
}

关键修正点:

  • 用StringBuilder代替直接字符串拼接,保证内容完整且性能更优
  • 去掉错误的初始值赋值,避免无效字符干扰
  • 循环中正确拼接每次读取的内容,最终得到完整的文件内容字符串

这样你就能把文件内容完整存储到fileContent变量里,进行后续的任何处理了。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:47:14