Java文件处理问题:switch case中Case2查找并写入文件实现受阻
Java文件处理Switch Case程序修复(Case2文件查找逻辑实现)
你的Case2核心问题
- 错误地将文件名变量
name覆盖为输入的文本内容text,导致写入的文件名变成了文本内容,完全偏离逻辑 - 没有实现文件查找的核心逻辑:判断目标文件是否存在
- 文件名后缀和Case1不统一(Case1自动加
.txt,Case2没处理,用户输入不带后缀会找不到文件) - 未处理文件操作的IO异常,也没有正确关闭流(推荐用try-with-resources自动管理)
修正后的完整代码
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class FileHandler { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请选择操作:1-创建文件 2-查找文件并写入内容 3-显示文件内容"); int pickaNum = scanner.nextInt(); scanner.nextLine(); // 读取换行符,避免后续nextLine()读取空内容 switch (pickaNum) { case 1: // 创建文件 System.out.println("请输入要创建的文件名:"); String fileName = scanner.nextLine() + ".txt"; File file = new File(fileName); try { if (file.createNewFile()) { System.out.println("文件创建成功:" + fileName); } else { System.out.println("该文件已存在"); } } catch (IOException e) { System.out.println("创建文件失败:" + e.getMessage()); } break; case 2: // 查找文件并写入内容 System.out.println("请输入要写入的文件名:"); String targetName = scanner.nextLine() + ".txt"; File targetFile = new File(targetName); // 实现文件查找逻辑:判断文件是否存在 if (!targetFile.exists()) { System.out.println("未找到文件:" + targetName); break; } System.out.println("请输入要写入的内容:"); String text = scanner.nextLine(); // 使用try-with-resources自动关闭流,无需手动close() try (FileWriter fw = new FileWriter(targetFile)) { fw.write(text); System.out.println("内容写入成功"); } catch (IOException e) { System.out.println("写入文件失败:" + e.getMessage()); } break; case 3: // 显示文件内容 System.out.println("请输入要查看的文件名:"); String viewName = scanner.nextLine() + ".txt"; File viewFile = new File(viewName); if (!viewFile.exists()) { System.out.println("未找到文件:" + viewName); break; } try (Scanner fileScanner = new Scanner(viewFile)) { System.out.println("文件内容:"); while (fileScanner.hasNextLine()) { System.out.println(fileScanner.nextLine()); } } catch (IOException e) { System.out.println("读取文件失败:" + e.getMessage()); } break; default: System.out.println("无效的选择,请输入1-3之间的数字"); } scanner.close(); } }
关键修复点说明
- 文件查找逻辑:用
targetFile.exists()判断文件是否存在,不存在则提示并退出case2 - 文件名统一:所有操作都自动给文件名加上
.txt后缀,和Case1保持一致,避免用户输入差异导致找不到文件 - 变量修正:不再覆盖文件名变量,用
text存储输入的内容,正确写入目标文件 - 异常处理:所有文件操作都包裹在try-catch中,捕获
IOException并给出友好提示 - 资源管理:使用try-with-resources语法,自动关闭Scanner、FileWriter等资源,避免资源泄漏
- Scanner复用:只创建一个Scanner实例,避免多次创建造成资源浪费,同时处理了nextInt()后的换行符问题
内容的提问来源于stack exchange,提问作者Michael Oliva Tonilon
相关产品推荐
相关产品推荐

