如何仅用java.io.*库将文本文件加载到字符串数组(无需Scanner)
替换Scanner,仅用java.io.*读取词典文件到字符串数组
嘿,我来帮你搞定这个问题!既然你想去掉Scanner依赖,只用java.io.*包里的类来读取那个10万+单词的词典文件,其实有几种高效靠谱的方法,我给你一步步拆解:
核心思路:用BufferedReader逐行读取
词典文件通常是每行一个单词的格式,BufferedReader是java.io里专门用来高效读取文本的类,自带缓冲区,处理大文件(比如10万+单词)比Scanner效率更高,而且完全符合你的依赖要求。
完整代码示例
import java.io.*; import java.util.ArrayList; import java.util.List; public class tester { public static void main(String[] args) throws IOException { // 替换成你的词典文件实际路径 File f = new File("C:/Users/alienware14/.../your-dictionary.txt"); List<String> wordList = new ArrayList<>(); // 用try-with-resources自动关闭流,避免资源泄漏 try (BufferedReader br = new BufferedReader(new FileReader(f))) { String line; // 逐行读取,直到文件末尾 while ((line = br.readLine()) != null) { // 跳过空行,只保留有效单词 String trimmedWord = line.trim(); if (!trimmedWord.isEmpty()) { wordList.add(trimmedWord); } } } // 将List转为字符串数组(如果必须用数组存储的话) String[] wordArray = wordList.toArray(new String[0]); // 这里可以添加后续逻辑,比如打印测试 System.out.println("共读取到 " + wordArray.length + " 个单词"); } }
额外优化:指定字符编码(避免乱码)
如果你的词典文件有特殊编码(比如UTF-8),可以用InputStreamReader来明确指定编码,避免读取时出现乱码:
// 替换BufferedReader的初始化代码 try (BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream(f), "UTF-8"))) { // 读取逻辑和上面一致 }
注:这里用字符串
"UTF-8"指定编码,不需要额外导入其他包,完全依赖java.io.*。
为什么不用Scanner?
Scanner虽然方便,但它的核心是解析输入,而非高效读取大文本;而BufferedReader专注于文本读取,缓冲区机制能大幅减少磁盘IO次数,处理10万+单词的大文件时性能优势很明显。另外用try-with-resources语法能自动关闭流,不用手动写finally块,代码更简洁安全。
内容的提问来源于stack exchange,提问作者Java Student
相关产品推荐
相关产品推荐

