将多个输出保存到csv文件

时间:2016-11-29 02:43:20

标签: java csv output

因此,自从加入这个社区以来,我收到了一些提示并获得了一些学习Java的资源。我现在已经上课了6周,正在完成我的第三个项目。我觉得我学到了很多,但如果我想掌握Java,我还有很长的路要走。

这次我的问题是如何让我的代码将多个输出保存到文件中?

我当前项目的一部分是执行以下操作:

  

“当窗口关闭时,效率值应使用> n值从0到10计算并写入文件。文件>>的每一行应包含n的值,效率>> n的值和递归方法的效率的迭代方法。值>应该用逗号分隔,这样就可以用Excel打开文件了。“

我设法让程序在输出文件中写入一个条目。但是,我要么在代码中出错,要么遗漏了一些关键的东西。有人能指出我正确的解决方案吗?我想我可能要创建一个数组,将输出存储在那里,然后将数组输出到csv。我看过roseindia和viralpatel,但那些并没有透露我的希望。

顺序(第一部分搞砸了)

package cmisproject3;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.*;

public class CMISProject3 extends JFrame implements ActionListener {

    private final int           TWICE           = 2;
    private JLabel              jLabel1         = new JLabel(), jLabel2 = new JLabel(), jLabel3 = new JLabel(), jLabel4 = new JLabel(), jLabel5 = new JLabel(), jLabel6 = new JLabel();
    private ButtonGroup         radioButtons    = new ButtonGroup();
    private JRadioButton        iterativeBtn    = new JRadioButton(), recursiveBtn = new JRadioButton();
    private JTextField          enterN          = new JTextField(16), textResult = new JTextField(16), textEfficiency = new JTextField(16);
    private JButton             computeBtn      = new JButton();
    private int                 efficiency;
    private Sequence            sequence;
    private static FileWriter   fileWriter;
    private File                file            = new File("output.txt");

    // Beginning of the constructor for the GUI
    public CMISProject3() throws IOException {

        sequence = new Sequence();
        setSize(300, 200); // define size of GUI
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        getContentPane().setLayout(new GridLayout(6, 2));
        getContentPane().add(jLabel4);
        radioButtons.add(iterativeBtn);
        iterativeBtn.setSelected(true); // sets Iterative as default GUI selection
        iterativeBtn.setText("Iterative");
        getContentPane().add(iterativeBtn);
        getContentPane().add(jLabel5);
        radioButtons.add(recursiveBtn);
        recursiveBtn.setText("Recursive");
        getContentPane().add(recursiveBtn);
        jLabel1.setText("Enter n: ");
        getContentPane().add(jLabel1);
        getContentPane().add(enterN);
        getContentPane().add(jLabel6);
        computeBtn.setText("Compute");
        computeBtn.addActionListener(this);
        getContentPane().add(computeBtn);

        jLabel2.setText("Result: ");
        getContentPane().add(jLabel2);
        getContentPane().add(textResult);
        textResult.setEditable(false);
        jLabel3.setText("Efficiency: ");
        getContentPane().add(jLabel3);
        getContentPane().add(textEfficiency);
        textEfficiency.setEditable(false);
        pack();
    }

    public void actionPerformed(ActionEvent event) {
        int result;
        efficiency = 0;
        try {
            fileWriter = new FileWriter(file);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        if (iterativeBtn.isSelected()) {
            result = sequence.computeIterative(Integer.parseInt(enterN.getText()));
        } else {
            result = sequence.computeRecursive(Integer.parseInt(enterN.getText()));
        }
        try {
            System.out.println(result);
            fileWriter.write(result + ", " + sequence.getEfficiency());
        } catch (IOException e) {
            e.printStackTrace();
        }
        textResult.setText(Integer.toString(result));
        textEfficiency.setText(Integer.toString(sequence.getEfficiency()));
        try {
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        CMISProject3 CMISProject3 = new CMISProject3();
        CMISProject3.setVisible(true);
    }
}

GUI(钉它?)

    Select * from testtable where arovaica = REPLACE(@passedvalue, '', '''')

对于那些感兴趣的人,这里是我正在进行的参数。 Instructions

2 个答案:

答案 0 :(得分:0)

每次执行操作时都会重新打开文件,而不会告诉FileWriter追加而不是覆盖。

请参阅: https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,%20boolean)

答案 1 :(得分:0)

我认为你的项目有一个良好的开端。但是,除了你的问题,我还会看到其他问题。

首先,我会解决您的问题,然后转到其他项目。我假设当你说:

  

将单个条目写入输出文件

你说你能够在文件中写一行。这意味着你的问题是:我怎样才能在文件中写多行?

在这种情况下,您至少有两个选择。一种是将FileWriter设置为append,而不是覆盖现有文件内容的默认行为。

另一种选择是避免在你完成写作之前关闭FileWriter。例如,您可以通过将fileWriter的构造移动到GUI的构造函数并将调用移动到close方法到GUI关闭时触发的事件处理程序来完成此操作。 p>

无论你选择做什么,你都需要记住在每一行的末尾写下换行符,否则你的文件将是一个非常长的行。所以,修改你现在拥有的东西看起来像这样:

fileWriter.write(result + ", " + sequence.getEfficiency()+"\n");

其他问题:

您的Sequence.computeRecursiveHelper方法不是递归的。递归方法调用自身,你的不会这样做。

我不认为您正确遵循说明。也许你还没有完成,你打算修改你的代码。如果是这种情况,你可以忽略我要指出的内容。说明指出:

  

当窗口关闭时,效率值应使用0到10的n值计算并写入文件。

每当用户点击" Compute"时,您当前正在写入该文件。按钮而不是上面做的。此外,您还没有写出正确的数据 - 您根据用户的输入而不是使用n从0到10获得的值来编写您获得的值。