为什么我的输出没有保存为文件?
Why isn't my output being saved as a file?
我正在创建一个接受用户输入的应用程序,将其发送到我的 pccalc 方法,当按下 GUI class(不存在)中的提交按钮时,会打开 pw class window 显示结果。我现在要做的是在调用 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);
}
}
Class 在 window
中显示结果
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 cb, String cl, String oc, String gb, String gl, String fs, String ss, String sa, String fq, 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, cbrand, cline, gbrand, gline, fstorage, sstorage, savailable, fquarter, 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, cbrand, cline, gbrand, gline, fstorage, sstorage, savailable, fquarter, cfan);
btnAdv.setEnabled(false);
btnct++;
}
});
btnAdv.setBounds(214, 284, 187, 29);
framePU.getContentPane().add(btnAdv);
scrollPane.setBounds(22, 354, 354, 230);
System.setOut(printStream);
System.setErr(printStream);
}
}
将输出写入 System.out
并使用 System.setOut
更改它指向的内容最终导致长 运行 混乱。我建议将 PrintStream
传递给 pccalc.display
和 pccalc.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
}
我还建议你给你的方法和变量起有意义的名字——你会在很长一段时间内感谢自己 运行
我正在创建一个接受用户输入的应用程序,将其发送到我的 pccalc 方法,当按下 GUI class(不存在)中的提交按钮时,会打开 pw class window 显示结果。我现在要做的是在调用 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);
}
}
Class 在 window
中显示结果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 cb, String cl, String oc, String gb, String gl, String fs, String ss, String sa, String fq, 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, cbrand, cline, gbrand, gline, fstorage, sstorage, savailable, fquarter, 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, cbrand, cline, gbrand, gline, fstorage, sstorage, savailable, fquarter, cfan);
btnAdv.setEnabled(false);
btnct++;
}
});
btnAdv.setBounds(214, 284, 187, 29);
framePU.getContentPane().add(btnAdv);
scrollPane.setBounds(22, 354, 354, 230);
System.setOut(printStream);
System.setErr(printStream);
}
}
将输出写入 System.out
并使用 System.setOut
更改它指向的内容最终导致长 运行 混乱。我建议将 PrintStream
传递给 pccalc.display
和 pccalc.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
}
我还建议你给你的方法和变量起有意义的名字——你会在很长一段时间内感谢自己 运行