修改Week2英尺转米程序实现文件读写,运行报错求助
解决英尺转米程序的文件读写报错问题
我来帮你搞定这个英尺转米的文件读写程序问题!先说说大概率导致报错的几个原因,再给你修正后的完整代码:
常见报错原因
- 文件路径不对:如果
feet.txt没放在程序运行的当前文件夹里,会直接抛出文件未找到的异常 - 没处理IO异常:Java里文件读写操作必须显式处理
IOException,不然连编译都通不过 - 输出格式不达标:没有按要求保留1位小数,或者输出的字符串格式和示例不符
- 文件流没正确关闭:容易造成资源泄漏,甚至导致写入的内容没完全保存到文件里
修正后的完整代码
import java.io.*; import java.util.Scanner; public class FeetToMetersConverter { public static void main(String[] args) { // 固定转换系数:1英尺=0.3048米 final double FEET_TO_METERS = 0.3048; // 用try-with-resources自动管理文件流,不用手动关闭,避免资源泄漏 try (Scanner inputScanner = new Scanner(new File("feet.txt")); PrintWriter outputWriter = new PrintWriter(new File("meters.txt"))) { // 循环读取文件里的每一个double数值 while (inputScanner.hasNextDouble()) { double feet = inputScanner.nextDouble(); double meters = feet * FEET_TO_METERS; // 严格按照要求格式化输出,保留1位小数 outputWriter.printf("%.1f 英尺转换为 %.1f 米%n", feet, meters); } System.out.println("转换成功!结果已经写入meters.txt文件"); } catch (FileNotFoundException e) { // 专门处理文件找不到的情况,给用户明确提示 System.err.println("错误:找不到feet.txt文件!请确认它在程序运行的当前目录下。"); e.printStackTrace(); } catch (Exception e) { // 捕获其他未知异常,方便排查问题 System.err.println("程序运行时出现意外错误:"); e.printStackTrace(); } } }
代码关键说明
- 自动管理文件流:
try-with-resources会在代码块结束后自动关闭Scanner和PrintWriter,不用手动写close(),彻底避免资源泄漏问题 - 异常友好处理:针对文件未找到的情况给出明确提示,其他异常也会打印堆栈信息方便调试
- 精准格式化输出:用
%.1f确保数值只保留1位小数,%n是跨平台的换行符,不管Windows还是Linux都能正确换行 - 安全读取数据:用
hasNextDouble()判断下一个内容是不是有效的double数值,避免读取到非数字内容导致程序崩溃
内容的提问来源于stack exchange,提问作者Samara Lucero
相关产品推荐
相关产品推荐

