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(); } }
关键部分解释
- 文件存在性检查:用
File.exists()判断文件是否存在,如果不存在直接提示用户并退出,避免后续报错 - 数据读取与校验:用
BufferedReader高效读取文件,逐行处理;用split("\\s+|,")处理空格或逗号分隔的整数;捕获NumberFormatException跳过无效数据,保证程序不会因为无效内容崩溃 - 去重+排序:直接用
TreeSet集合,它的特性就是自动按升序排序,并且不允许重复元素,完美匹配需求 - 文件写入:用
try-with-resources语法,不用手动关闭流,避免资源泄漏;写入时覆盖原文件(如果需要保留原文件备份,可以先复制原文件再写入)
可选调整
- 如果你的文件是每行一个整数,那分割代码可以简化,直接把每行内容转成整数就行
- 要是不想用
TreeSet,也可以先用ArrayList存所有有效整数,然后用Collections.sort()排序,再手动遍历去重(比如用另一个HashSet辅助)
内容的提问来源于stack exchange,提问作者J. Ill
相关产品推荐
相关产品推荐

