如何在Java文件转大写程序中添加姓名行与日期行?
Java程序:给转大写的输出文件首尾添加姓名和日期
你的代码现在有个核心问题:第一个while(fileToScan.hasNext())循环把输入文件的内容全读完了,Scanner指针移到了文件末尾,第二个循环根本跑不起来,所以输出文件convertToUpper.txt里不会有原文件的内容。要实现首尾加内容的需求其实很简单——因为我们是新建输出文件,直接控制写入顺序就行:
修改后的完整代码
/* * 2/16/24 * Purpose of this program is to convert contents of a file to upper case letters. */ package UpperCaseFileConverter; import java.io.File; import java.io.IOException; import java.util.Scanner; import java.io.PrintWriter; import java.time.LocalDate; // 用于获取当前日期 public class UpperCaseFileConverter { public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); String userFileName; // 获取文件名 System.out.print(" Enter the Filename: "); userFileName = scanner.nextLine(); // 检查文件是否存在 File file = new File(userFileName); while(!file.exists()) { System.out.print(userFileName + " does not exist. Please re-enter the file name\n" + "remember for this example we are using \"convert.txt\"" ); userFileName = scanner.nextLine(); file = new File(userFileName); } Scanner fileToScan = new Scanner(file); PrintWriter fileToWrite = new PrintWriter("convertToUpper.txt"); // 1. 在输出文件开头写入你的姓名 String yourName = "你的姓名"; // 替换成你的实际姓名 fileToWrite.println(yourName); // 读取原文件内容,转大写后同时输出到控制台和写入文件 while(fileToScan.hasNextLine()) { String line = fileToScan.nextLine().toUpperCase(); System.out.println(line); // 控制台测试输出 fileToWrite.println(line); // 写入输出文件 } // 2. 在输出文件末尾写入日期(这里用当前系统日期,也可以手动指定) String currentDate = LocalDate.now().toString(); // 格式为YYYY-MM-DD,也可以自定义格式 // 如果要手动指定日期,比如"2/16/24",就改成 String currentDate = "2/16/24"; fileToWrite.println(currentDate); System.out.println("Contents have been converted to upper case and saved in convertToUpper.txt"); fileToWrite.close(); fileToScan.close(); scanner.close(); // 别忘了关闭用户输入的Scanner } }
关键说明
- 开头加姓名:
PrintWriter是从文件起始位置开始写入的,所以在处理原文件内容前,先调用fileToWrite.println(yourName),这行内容就会成为输出文件的第一行。 - 末尾加日期:等原文件所有内容处理并写入完成后,再调用
fileToWrite.println(currentDate),这行内容会自动追加到文件最后。 - 修复原代码的写入问题:把两个
while循环合并成一个,一次读取一行,同时完成控制台输出和文件写入,避免Scanner被耗尽导致后续循环无内容可读。 - 日期处理:用
LocalDate.now()可自动获取当前系统日期,如果你需要固定日期,直接替换成目标字符串即可。
内容的提问来源于stack exchange,提问作者TheBigDookie
相关产品推荐
相关产品推荐

