
本文详解如何正确读取逗号分隔的文本文件,将其解析为字符串列表,并避免因索引越界导致的 `indexoutofboundsexception`,提供简洁、健壮且符合现代 java 最佳实践的解决方案。
在 Java 中,将文本文件(如 myTEXT.txt)内容按分隔符(例如逗号)拆分为可索引访问的列表时,常见错误源于对 Scanner 的误用或对集合动态扩容机制理解不足。您原始代码中存在两个关键问题:
- add(index, element) 的误用:List.add(int index, E element) 要求插入位置必须是合法索引(0 ≤ index ≤ size())。首次调用 TexttoList.add(3, ...) 时,列表为空(size = 0),因此索引 3 显然越界;
- 嵌套循环逻辑错误:while(scanText.hasNext()) 与内层 for(int d = 0; d
✅ 推荐使用 Java NIO.2(自 JDK 7 起),代码简洁、安全、高效:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class TextFileToList {
public static void main(String[] args) {
try {
// 1. 读取整个文件为字符串(默认 UTF-8)
String content = Files.readString(Paths.get("myTEXT.txt"));
// 2. 按逗号及可选空格分割 → 字符串数组
String[] parts = content.split(",\\s*");
// 3. 转为 List(支持索引访问)
List textList = Arrays.asList(parts);
// ✅ 安全访问:先校验索引有效性
int targetIndex = 3;
if (targetIndex >= 0 && targetIndex < textList.size()) {
System.out.println("Element at index 3: " + textList.get(targetIndex)); // 输出: COMMING
} else {
System.err.println("Index " + targetIndex + " is out of bounds. List size: " + textList.size());
}
} catch (IOException e) {
System.err.println("Failed to read file: " + e.getMessage());
}
}
} ? 关键说明与最佳实践:
- Files.readString() 自动处理资源关闭与 UTF-8 解码,无需手动管理 FileReader 或 Scanner;
- split(",\\s*") 中的正则 \\s* 可匹配逗号后任意数量空白字符(空格、制表符等),增强鲁棒性;
- 务必在访问前检查索引边界(如示例中的 if 判断),这是避免 IndexOutOfBoundsException 的根本方式;
- 若需可变列表(如后续要增删元素),可用 new ArrayList(Arrays.asList(parts));
- 对于大文件或多行数据,应改用 Files.lines() 流式处理,避免内存溢出。
? 总结:摒弃手动循环+错误 add(index, ...) 模式,优先采用 Files.readString().split() 组合,并始终进行索引校验——简洁、安全、符合现代 Java 风格。










