繁体   English   中英

将控制台输出打印到文本文件 Java?

[英]To print console output to text file Java?

我正在尝试将程序的输出发送到名为 results.txt 的文本文件。 这是我的尝试

public void writeFile(){
        try{    
            PrintStream r = new PrintStream(new File("Results.txt"));
            PrintStream console = System.out;

            System.setOut(r);
        } catch (FileNotFoundException e){
            System.out.println("Cannot write to file");
        }

但是每次我运行代码并打开文件时,文件都是空白的。 这是我想要输出的:

public void characterCount (){
       int l = all.length();
       int c,i;
       char ch,cs;
       for (cs = 'a';cs <='z';cs++){
           c = 0;
           for (i = 0; i < l; i++){
               ch = all.charAt(i);
               if (cs == ch){
                   c++;
               }

           }
           if (c!=0){
//THIS LINE IS WHAT I'M TRYING TO PRINT
                System.out.println("The character"+ " "+ cs + " "+ "appears --> "+" "+c+" "+ "times");
           }
       }
    }

我哪里出错了,它不断创建文件但不写入文件? (顺便说一句,我确实有一个主要方法)

用:

PrintWriter writer = new PrintWriter("Results.txt");

writer.print("something something");

不要忘记添加:

writer.close();

当你完成!

正如您所发现的, System.out是一个PrintStream ,您可以创建一个PrintStream ,将它传递给一个File以使其写入该文件。 这就是多态的美妙之处 --- 您的代码写入PrintStream并且它是什么类型并不重要:控制台、文件、甚至网络连接或压缩的加密网络文件。

因此,与其搞乱System.setOut (通常是个坏主意,因为它可能会产生意想不到的副作用;只有在您绝对必须这样做时才这样做(例如,在某些测试中)),只需将您选择的PrintStream传递给您的代码:

public void characterCount (PrintStream writeTo) {
    // (your code goes here)
    writeTo.println("The character"+ " "+ cs + " "+ "appears --> "+" "+c+" "+ "times");
    // (rest of your code)
}

然后您可以根据需要调用您的方法:

public static void main(String[] args) throws FileNotFoundException {
    new YourClass().characterCount(System.out);
    new YourClass().characterCount(new PrintStream(new File("Results.txt")));
}

(请注意,我声明main可能会抛出FileNotFoundException ,因为new File("...")可以抛出该FileNotFoundException 。发生这种情况时,程序将退出并显示错误消息和堆栈跟踪。您也可以像以前一样处理它在writeFile之前。)

JAVADOC:“PrintStream 向另一个输出流添加了功能,即方便地打印各种数据值的表示的能力。”

PrintStream 可用于写入 OutputStream,而不是直接写入文件。 因此,您可以使用 PrintStream 写入 FileOutputStream,然后使用该文件写入文件。

如果您只想简单地写入文件,则可以轻松使用 Cans answer!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM