为什么我的输出没有保存为文件?

如何解决为什么我的输出没有保存为文件?

我正在创建一个接受用户输入的应用程序,将其发送到我的pccalc方法,并在按下GUI类(不存在)中的提交按钮时打开pw类窗口以显示结果。我现在想做的是,一旦调用displayC方法,将输出打印到我的textArea到一个.txt文件中。您可以在下面看到我尝试过的内容,但是什么也没发生,而且我不确定从这里去哪里。

预期的输出将是display和displayC方法,它们都将出现在输出中,然后再以txt格式的文件名作为内部版本名称保存到文件中。

打印方法:

package pcbuilder;
    
public class pccalc {

public void display() {
    
    curWatt = cpu + cpuO + mobo + gpu + fastStore + slowStore + store + exStore + fan + sound; ////(http://www.buildcomputers.net/power-consumption-of-pc-components.html) for high end Mobo
    
    System.out.printf("The max PSU wattage estimate is: " + curWatt + ".%n");
    System.out.println("We suggest a minimum of 80+ Gold rating.");
    System.out.println("A wattage of even 100w - 200w less is doable!");
    
}

public void displayC(String n,String cb,String cl,String gb,String gl,String fs,String ss,String sa,String fq,String cf) {
    
    curWatt = cpu + cpuO + mobo + gpu + fastStore + slowStore + store + exStore + fan + sound; 
    
    System.out.printf("%nBuild Name: %s",buildName);
    System.out.printf("%nCPU - %s %s: %d",cb,cl,cpu);
    System.out.printf("%nCPU OC Needed: %d",cpuO);
    System.out.printf("%nMotherboard: %d",mobo);
    System.out.printf("%nGPU - %s %s: %d",gb,gl,gpu);
    System.out.printf("%nSSD/NVME - %s: %d",fs,fastStore);
    System.out.printf("%nHDD - %s: %d",ss,slowStore);
    System.out.printf("%nUnused Sata/NVME - %s: %d",sa,store);
    System.out.printf("%nCD/DVD/BlueRay - %s: %d",fq,exStore);
    System.out.printf("%nFans - %s: %d",cf,fan);
    System.out.printf("%nOverhead for Sound: %d",sound);
    System.out.printf("%nTotal Estimated Wattage: %d%n",curWatt);

    }
}

在窗口中显示结果的类

package pcbuilder;
import java.awt.EventQueue;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import javax.swing.JLabel;
import javax.swing.SwingConstants;

import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class pw {

    test nt = new test();
    private JFrame framePU;
    JLabel lblNewLabel = new JLabel("Your Max PSU Estimate!");
    JScrollPane scrollPane_1 = new JScrollPane();
    JTextArea psuArea = new JTextArea();        
    PrintStream printStream = new PrintStream(new CustomOutputStream(psuArea));
    JScrollPane scrollPane = new JScrollPane();
    JButton btnAdv = new JButton("Advanced Breakdown");
    pccalc pcp = new pccalc("");

    
    
    String in = "";
    String cbrand = "N/A";
    String cline = "N/A" ;
    String oclock = "";
    String gbrand = "N/A";
    String gline = "N/A";
    String fstorage = "0";
    String sstorage = "0";
    String savailable = "0";
    String fquarter = "0";
    String cfan = "0";
    String soverhead = "";
    String fn = in + ".txt";
    int btnct = 0;

    /**
     * Launch the application.
     */
    

    public void newScreen(String n,String oc,String cf,String so) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {

                try {

                    lblNewLabel.setText("A different label");

                    in = n;
                    cbrand = cb;
                    cline = cl;
                    oclock = oc;
                    gbrand = gb;
                    gline = gl;
                    fstorage = fs;
                    sstorage = ss;
                    savailable = sa;
                    fquarter = fq;
                    cfan = cf;
                    soverhead = so;
                    
                    //A method from the pccalc class that recalculates based on the strings passed through.
                    pcp.reCalc(in,cbrand,cline,oclock,gbrand,gline,fstorage,sstorage,savailable,fquarter,cfan,soverhead);
                    pcp.display();
                    
                    framePU.setVisible(true);
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public pw() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        framePU = new JFrame();
        framePU.setBounds(100,100,450,348);
        framePU.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        framePU.getContentPane().setLayout(null);
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        
        
        lblNewLabel.setBounds(128,6,200,16);
        framePU.getContentPane().add(lblNewLabel);
        
        
        scrollPane_1.setBounds(6,26,438,246);
        framePU.getContentPane().add(scrollPane_1);
        
        
        scrollPane_1.setViewportView(psuArea);
        
        JButton btnSave = new JButton("Save");
        btnSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                if (btnct != 1) {
                    
                    pcp.displayC(in,cfan);
                    
                }
                
                PrintStream fileStream = null;
                try {
                    fileStream = new PrintStream(new FileOutputStream(in));
                } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                
                System.setOut(fileStream);

            }
        });
        btnSave.setBounds(45,284,86,29);
        framePU.getContentPane().add(btnSave);
        
        

        btnAdv.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pcp.displayC(in,cfan);
                btnAdv.setEnabled(false);
                btnct++;
            }
        });
        btnAdv.setBounds(214,187,29);
        framePU.getContentPane().add(btnAdv);
        
        scrollPane.setBounds(22,354,230);
        System.setOut(printStream);
        System.setErr(printStream);
    }
}

解决方法

将输出写到System.out并使用System.setOut来更改其指向的内容,从长远来看最终会造成混乱。我建议将PrintStream传递给pccalc.displaypccalc.displayC方法,这样就不必更改System.out:

public void display(PrintStream out) {
    curWatt = cpu + cpuO + mobo + gpu + fastStore + slowStore + store + exStore + fan + sound; ////(http://www.buildcomputers.net/power-consumption-of-pc-components.html) for high end Mobo
    out.printf("The max PSU wattage estimate is: " + curWatt + ".%n");
    out.println("We suggest a minimum of 80+ Gold rating.");
    out.println("A wattage of even 100w - 200w less is doable!");
}

每次调用以下方法时,请不要忘记传递正确的输出流:

pcp.display(printStream);

现在写入新文件很容易:

try (PrintStream fileStream = new PrintStream(new FileOutputStream(name of your file here))) {
    pcp.display(fileStream);
    pcp.displayC(fileStream,the rest of your long parameter list here);
} catch (FileNotFoundException e1) {
    // display an error dialog to the user here
}

我还建议您为您的方法和变量取有意义的名称-从长远来看,您会感激的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-