You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:25:22