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

Java作业求助:编写文本文件整数排序去重并覆盖的程序

搞定Java文件整数去重排序的作业指南

别慌!我来一步步帮你拆解这个任务,咱们把它分成几个核心步骤,逐个解决就不会乱了:

核心任务拆解

  • 获取用户输入的文件名,先检查文件是否存在
  • 从文件里读取整数,同时过滤掉非整数的无效数据
  • 对读取到的整数做去重+排序处理
  • 把处理后的结果写回原文件

完整代码实现

直接上可运行的代码,我会在后面逐部分解释:

import java.io.*;
import java.util.*;

public class IntegerFileProcessor {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 第一步:获取文件名并检查文件是否存在
        System.out.print("请输入要处理的文件名:");
        String fileName = scanner.nextLine().trim();
        File targetFile = new File(fileName);
        
        if (!targetFile.exists()) {
            System.out.println("出错啦:这个文件不存在哦!");
            scanner.close();
            return;
        }
        
        // 第二步:读取文件中的有效整数,自动去重排序
        // TreeSet会自动帮我们完成升序排序和去重,省了不少事
        Set<Integer> processedIntegers = new TreeSet<>();
        try (BufferedReader reader = new BufferedReader(new FileReader(targetFile))) {
            String line;
            // 逐行读取文件内容
            while ((line = reader.readLine()) != null) {
                // 处理每行的整数,支持空格或逗号分隔的情况
                String[] numberParts = line.split("\\s+|,");
                for (String part : numberParts) {
                    part = part.trim();
                    if (!part.isEmpty()) {
                        try {
                            // 尝试把字符串转成整数
                            int num = Integer.parseInt(part);
                            processedIntegers.add(num);
                        } catch (NumberFormatException e) {
                            // 遇到非整数的无效数据,给出警告但不中断程序
                            System.out.printf("警告:跳过无效内容 '%s',这不是整数%n", part);
                        }
                    }
                }
            }
        } catch (IOException e) {
            System.out.println("读取文件时出问题了:" + e.getMessage());
            scanner.close();
            return;
        }
        
        // 第三步:把处理好的整数写回原文件
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(targetFile))) {
            for (Integer num : processedIntegers) {
                writer.write(num.toString());
                writer.newLine(); // 每个整数单独占一行,你也可以改成用空格分隔
            }
            System.out.println("搞定!已经把去重排序后的整数写回文件啦~");
        } catch (IOException e) {
            System.out.println("写入文件时出错了:" + e.getMessage());
        }
        
        scanner.close();
    }
}

关键部分解释

  1. 文件存在性检查:用File.exists()判断文件是否存在,如果不存在直接提示用户并退出,避免后续报错
  2. 数据读取与校验:用BufferedReader高效读取文件,逐行处理;用split("\\s+|,")处理空格或逗号分隔的整数;捕获NumberFormatException跳过无效数据,保证程序不会因为无效内容崩溃
  3. 去重+排序:直接用TreeSet集合,它的特性就是自动按升序排序,并且不允许重复元素,完美匹配需求
  4. 文件写入:用try-with-resources语法,不用手动关闭流,避免资源泄漏;写入时覆盖原文件(如果需要保留原文件备份,可以先复制原文件再写入)

可选调整

  • 如果你的文件是每行一个整数,那分割代码可以简化,直接把每行内容转成整数就行
  • 要是不想用TreeSet,也可以先用ArrayList存所有有效整数,然后用Collections.sort()排序,再手动遍历去重(比如用另一个HashSet辅助)

内容的提问来源于stack exchange,提问作者J. Ill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:01:45