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
相关产品推荐
相关产品推荐

