Java FIle输入输出和文件输出

时间:2013-07-18 07:04:28

标签: java fileinputstream

try {
       System.out.println(f.getAbsoluteFile());

     //   FileInputStream input = new FileInputStream(f);

       FileInputStream inp = new FileInputStream("C:\\Users\\Jamal\\Desktop\\Japaneseword1.xls");
       Workbook workbook = new HSSFWorkbook(inp);
       FileOutputStream output = new FileOutputStream("C:\\Users\\Jamal\\Desktop\\Japaneseword2.xls");

       Sheet sheet2 = workbook.getSheet("Japaneseword");            

       int num = sheet2.getLastRowNum();
       num=++;
       System.out.print(num);
       Row row = sheet2.createRow(num);
       Cell cell = row.createCell(0);
       cell.setCellValue(Japaneseword);
       Cell cell2 = row.createCell(1);
       cell2.setCellValue(Japaneseword);
       Cell cell3 = row.createCell(2);
       cell3.setCellValue(Japaneseword);
       Cell cell4 = row.createCell(3);
       cell4.setCellValue(Japaneseword);
       Cell cell5 = row.createCell(4);
       cell5.setCellValue(Japaneseword);
       Cell cellwebsite = row.createCell(5);

       workbook.write(output);
    }
    catch(Exception e){
        e.printStackTrace();
    }        
}

此代码的目的只是保存内容,添加行,并将用户的输入添加到excel文件。我使用InputStream尝试保存以前的条目,然后添加新条目,并使用outputstream打印出excel文件。我在过去做过这个没有问题,但由于某种原因inputstream没有正确保存。我对这个问题非常沮丧。很想知道为什么会这样。

感谢。

---更新---

好的,更新,由于某种原因,它偶尔会起作用。看看我是否使用上述方法创建文件,它将无法正确复制。但是,如果我将outputstream方法的构造函数中的文件名更改为excel文档上的其他名称,则它会开始计算行数。然后它会正确保存数据并按预期工作。这有意义吗?

基本上,在我创建文件之后,我必须返回,更改代码,然后保存并复制数据,然后我可以继续编辑文件。这种解决方案不实用。

2 个答案:

答案 0 :(得分:2)

您必须关闭流,尤其是输出流。否则你可能会丢失数据。

最后你必须

 output.close();
 inp.close();

答案 1 :(得分:1)

将结束语句放在finally块

try{
...
}catch(Exception ex){

}finally{
output.close();
inp.close();
}

确保即使抛出异常也会关闭/释放输入/输出流。