Java 为什么循环会覆盖初始代码,而不创建新的XSSFSheet?

Java 为什么循环会覆盖初始代码,而不创建新的XSSFSheet?,java,apache,loops,stream,Java,Apache,Loops,Stream,我想创建一个循环,将新工作表添加到工作簿中,但下面的代码不起作用 它创建一个新的工作表,但只是覆盖第一个工作表,而不是添加一个新的工作表 我认为这可能与fileOut流有关,但在末尾添加fileOut.close()并没有解决问题 public static void main (String[] args) throws IOException { String response; XSSFWorkbook workbook; do { //

我想创建一个循环,将新工作表添加到工作簿中,但下面的代码不起作用

它创建一个新的工作表,但只是覆盖第一个工作表,而不是添加一个新的工作表

我认为这可能与fileOut流有关,但在末尾添加
fileOut.close()
并没有解决问题

public static void main (String[] args) throws IOException
{
    String response; 
    XSSFWorkbook workbook; 
    do
    {
        // prompts user to pick file 
        JFileChooser fc = new JFileChooser(); 
        fc.setCurrentDirectory(new File("C:\\Users\\AMDX12\\Desktop"));
        fc.setDialogTitle("Choose File");
        fc.showOpenDialog(null);
        File selectedFile = fc.getSelectedFile(); 

        // gets questionPacketNumber from user 
        System.out.println("Enter the number of the question packet: ");
        Scanner keyboard = new Scanner (System.in); 
        String questionPacketNum = keyboard.nextLine(); 

        // creates new Workbook and a new Sheet
        workbook = new XSSFWorkbook(); 
        XSSFSheet sheet = workbook.createSheet(questionPacketNum); 

        // loops code
        System.out.println("would you like to do this again?");
        response = keyboard.nextLine(); 

        // saves workbook
        FileOutputStream fileOut = new FileOutputStream (new File ("c:\\Users\\Student\\newFile.xlsx")); 
        workbook.write(fileOut); 
        // fileOut.close();             
    } while (response.equalsIgnoreCase("yes") == true); 
}
简单:

workbook = new XSSFWorkbook(); 
XSSFSheet sheet = workbook.createSheet(questionPacketNum); 
在每个循环中创建一个新的工作簿。相反<代码>工作簿=新建XSSFWorkbook()应该放在循环的前面

换句话说:如果希望循环添加一张图纸;然后确保您的循环不会丢弃上一个工作簿和您在上一次迭代中添加的一张工作表!作为记录:您希望在输出流上调用
close()
;但理想情况下,您只需在此处使用


除此之外:请阅读关于这个问题的文章。你拙劣的方法导致了太多的事情。相反:编写一个创建工作簿的方法;请求用户输入的一种方法;添加新纸张的人;最后一个是把整件事写进文件

我照你说的做了,解决了问题。谢谢你提到单一责任原则。