有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

第一个Java程序(将排列写入文件)

我试图在文本文件中重复编写组合,问题是我试图在不了解java内部工作原理的情况下将一些代码拼凑在一起。当我重新排列代码时,我真的不确定我在影响什么

 import java.io.*;

    public class Main {
        public static void main(String args[]) {
            brute("123", 3, new StringBuffer());
        }
        static void brute(String input, int depth, StringBuffer output) {
            if (depth == 0) {
               // System.out.println(output);
                 {
                     try{
                   // Create file 
                   FileWriter fstream = new FileWriter("out.txt",true);
                       BufferedWriter out = new BufferedWriter(fstream);
                   out.write("blah" + output);}

         else {
            for (int i = 0; i < input.length(); i++) {
                output.append(input.charAt(i));
                brute(input, depth - 1, output);
                output.deleteCharAt(output.length() - 1); 
         }
       }

    }
    }

}

任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    我猜问题是,在运行应用程序结束时,您会得到一个空文件

    你应该简化写代码的部分:

    FileWriter fstream = new FileWriter("out.txt",true);
    BufferedWriter out = new BufferedWriter(fstream);
    out.write("blah" + output);
    

    你每次打开一个文件并把它写出来。这没关系(最好将其写入已打开的流),但不需要创建BufferedWriter,并且可以进一步简化代码

    FileWriter fstream = new FileWriter("out.txt", true);
    fstream.append(output);
    

    如果你运行这段代码,你仍然会发现它不起作用,只会在磁盘上生成一个空文件。重要的是在使用后关闭。将上述内容更改为:

    FileWriter fstream = new FileWriter("out.txt", true);
    fstream.append(output).append('\n');
    fstream.close();
    

    似乎可以让程序正常工作(代码中有一些语法错误,比如忘记捕获/抛出已检查的异常,但我认为这只是因为代码是手动复制的)

    关于如何进一步整理的建议:

    • 写入流,而不是每次写入项时打开和关闭文件
    • 使用finally确保您的文件始终处于关闭状态,即使在出现异常的情况下也是如此