JavaFX购物车系统:文件解析与ArrayList填充失败问题求助
问题排查与解决方案
1. 先确认文件路径正确性
- 把
BookPrices.txt放在项目根目录(和src文件夹同级),如果用IDE运行,可右键文件选择「Copy Path」获取绝对路径替换硬编码路径,避免因路径找不到文件导致读取失败。 - 错误路径示例:
正确路径示例(项目根目录):File file = new File("src/BookPrices.txt");File file = new File("BookPrices.txt");
2. 修复文件读取与解析逻辑
常见问题包括集合未初始化、拆分规则不匹配文件格式、未处理读取异常,以下是适配书名,价格格式(如Java核心技术,89.0)的正确代码:
// 必须提前初始化集合,避免空指针 ArrayList<String> inventoryTitles = new ArrayList<>(); ArrayList<Double> inventoryPrices = new ArrayList<>(); try (BufferedReader br = new BufferedReader(new FileReader("BookPrices.txt"))) { String line; while ((line = br.readLine()) != null) { // 处理行首尾空格,按逗号拆分 String[] parts = line.trim().split(","); if (parts.length == 2) { inventoryTitles.add(parts[0].trim()); // 捕获价格转换异常,避免整段读取中断 try { double price = Double.parseDouble(parts[1].trim()); inventoryPrices.add(price); } catch (NumberFormatException e) { System.err.println("行「" + line + "」价格格式错误"); } } else { System.err.println("行「" + line + "」格式不符合要求"); } } } catch (IOException e) { e.printStackTrace(); // 打印异常信息,快速定位读取失败原因 }
3. 确保代码执行时机正确
- 文件读取代码要在
start()方法的初始化阶段执行,不能等到按钮点击后才读取,否则点击按钮时集合还是空的:@Override public void start(Stage primaryStage) { // 先加载书籍数据 loadBookInventory(); // 再创建ListView并绑定数据 ListView<String> bookListView = new ListView<>(); bookListView.getItems().addAll(inventoryTitles); // 后续UI组件设置... } private void loadBookInventory() { // 把上面的读取解析代码放在这里 }
4. 快速调试验证
- 在读取完成后打印集合大小:
System.out.println("已加载书名数量:" + inventoryTitles.size());,确认是否有数据被读取。 - 检查
BookPrices.txt编码是否为UTF-8,避免乱码导致读取内容异常。 - 确保按钮点击事件中使用的是同一个集合对象,不要在事件方法里重新初始化集合。
内容的提问来源于stack exchange,提问作者Newbie123
相关产品推荐
相关产品推荐

