Java写入文件时display()方法报错求助:单数组双栈代码输出需求
哥们儿,我太懂你这种作业提交的烦恼了——之前我做数据结构作业的时候,也碰到过老师要纸质版源码+运行结果的要求,控制台直接复制粘贴转PDF要么格式乱成一团,要么字体大小不对,换成文件写入确实是最稳妥的办法。
针对你说的调用自定义display方法出错的问题,大概率是因为这些方法原本是直接往控制台输出(用System.out.println()),没有适配文件写入的逻辑,下面给你一套具体的解决思路:
解决单数组双栈display方法文件写入错误的方案
1. 先改造display方法,让它支持文件输出
你的display方法之前应该是只针对控制台写的,比如这种:
public void displayStack1() { System.out.println("Stack 1 的元素:"); for (int i = 0; i <= top1; i++) { System.out.print(arr[i] + " "); } System.out.println(); }
现在要改成支持传入输出流的版本,这样既可以输出到控制台,也能写入文件:
// 改造后的核心方法,接收PrintWriter作为输出目标 public void displayStack1(PrintWriter writer) { writer.println("Stack 1 的元素:"); for (int i = 0; i <= top1; i++) { writer.print(arr[i] + " "); } writer.println(); } // 保留原有的控制台输出功能,重载一个无参版本 public void displayStack1() { // 把System.out包装成PrintWriter,实现控制台输出 displayStack1(new PrintWriter(System.out, true)); }
另外两个display方法(比如displayStack2、displayBothStacks)也按照这个逻辑改造就行。
2. 统一管理文件写入流,避免资源泄漏
在主程序里,不要每次调用display都新建流,用try-with-resources语法创建PrintWriter,它会自动帮你关闭流,避免文件内容为空或者资源泄漏:
public static void main(String[] args) { TwoStacksUsingArray stacks = new TwoStacksUsingArray(10); // 写入到指定文件,这里用stack_output.txt作为输出文件 try (PrintWriter writer = new PrintWriter(new FileWriter("stack_output.txt"))) { // 先把源码写入文件(如果需要的话) writer.println("=== 单数组实现双栈的Java源码 ==="); // 这里可以读取你的源码文件内容写入,比如用Files.readAllLines List<String> sourceCode = Files.readAllLines(Paths.get("TwoStacksUsingArray.java"), StandardCharsets.UTF_8); for (String line : sourceCode) { writer.println(line); } // 然后执行栈操作,写入运行输出 writer.println("\n=== 运行输出结果 ==="); stacks.push1(10); stacks.push2(20); stacks.push1(15); stacks.push2(25); // 调用改造后的display方法写入文件 stacks.displayStack1(writer); stacks.displayStack2(writer); stacks.displayBothStacks(writer); // 如果需要同时在控制台看结果,调用无参版本 stacks.displayStack1(); } catch (IOException e) { System.err.println("写入文件出错:" + e.getMessage()); e.printStackTrace(); } }
3. 常见错误排查
- 如果出现
NullPointerException:检查你的PrintWriter是否初始化成功,有没有在调用display方法前提前关闭了流; - 如果文件内容为空:一定要用
try-with-resources语法,或者手动调用writer.flush()和writer.close()(前者更省心); - 如果格式混乱:和控制台输出逻辑一样,用
println()控制换行,print()控制连续输出,保持格式整齐。
这样操作之后,你就能得到一个包含完整源码和运行输出的文本文件,直接打印或者转PDF都不会有格式问题啦。
内容的提问来源于stack exchange,提问作者alwaysquestioning
相关产品推荐
相关产品推荐

