java 写文件时朝上_java:往文件中写数据,新写入的数据总是覆盖原有数据,怎么能实现追加功能呢? java中FileOut...

本文介绍Java中如何实现在已有文件中追加内容,而不覆盖原有数据的方法,并展示了如何利用Apache POI库操作Excel文件,包括创建、填充数据等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

File file=new File("f:/a.txt");

\t\tBufferedWriter bw=null;

\t\ttry {

\t\t\tbw=new BufferedWriter(new FileWriter(file,true));

\t\t\tbw.write("efg");

\t\t\tbw.close();

\t\t} catch (IOException e) {

\t\t\t// TODO Auto-generated catch block

\t\t\te.printStackTrace();

\t\t}

这里关键代码bw=new BufferedWriter(new FileWriter(file,true));

后面参数的true,就代表即使a.txt里面有内容,也不会替换。

poi的Sheet对象可以获取最后一行位置,如int lastRowNum = sheet.getLastRowNum(); 知道最后一行位置,就可以在最后一行后面开始加入新数据,如Row row = sheet.getRow(lastRowNum+1);

好吧,fileoutputstream有3个构造函数

FileOutputStream(File file);

FileOutputStream(String name);

FileOutputStream(String name,boolean append);

第三个构造函数就是确认是否将文件中的内容被输出流中的内容覆盖。这里的append 为true就是在文件末尾添加内容,为false就是覆盖。

了了否?

package com.ewin.test;

import java.io.File;

import java.io.FileOutputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.hssf.util.HSSFColor;

import com.ewin.common.DBException;

import com.ewin.util.ExcelUtil;

import com.ewin.util.StringUtil;

public class TestExl {

\t@SuppressWarnings("unchecked")

\tpublic static void main(String[] args)throws Exception {

\t\tClass.forName("oracle.jdbc.driver.OracleDriver");

\t\tConnection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.90:1521:a1", "bill", "bill");

\t\tStatement state = conn.createStatement();

\t\ttry {

\t\t\t// 导入时模板头部信息

\t\t\tString[] headNames = new String[] { "运单号", "运单ID"};

\t\t\t// 头部列对应的字段名

\t\t\tString[] fieldNames = new String[] { "BILL_NO", "BILL_ID"};

\t\t\tMap columnMap = new HashMap();

\t\t\tcolumnMap.put("BILL_NO", "运单号");

\t\t\tList returnList = ExcelUtil.getExcelToList(columnMap,""

\t\t\t\t\t+ "D:\\Documents\\Desktop\\exs.xls", 0);

\t\t\tList list = new ArrayList();

\t\t\tfor (int i = 0; i < returnList.size(); i++) {

\t\t\t\tMap map = (Map) returnList.get(i);

\t\t\t\t// 如果必填项为空,则提示信息,不能导入

\t\t\t\tResultSet result = state.executeQuery("select ser_bill_no bill_id from op_bill where bill_no = '"+map.get("BILL_NO").toString()+"'");

\t\t\t\tMap map1 = new HashMap();

\t\t\t\tmap1.put("BILL_NO",map.get("BILL_NO"));

\t\t\t\tString bill_id = "";

\t\t\t\twhile(result.next()){

\t\t\t\t\tbill_id = result.getString(1);

\t\t\t\t}

\t\t\t\tmap1.put("BILL_ID", bill_id);

\t\t\t\tlist.add(map1);

\t\t\t}

\t\t\tMap m = new HashMap();

\t\t\tm.put("LIST", list);

\t\t\tm.put("HEAD", headNames);

\t\t\tm.put("FIELD", fieldNames);

\t\t\tcreateExcel(m);

\t\t} catch (DBException e) {

\t\t\tthrow e;

\t\t}

\t\tstate.close();

\t\tconn.close();

\t\tSystem.out.println("生成完毕");

\t}

\t@SuppressWarnings("unchecked")

\tpublic static void createExcel(Map map){

\t\ttry{

\t\t\t// 获取要导出的数据集

\t\t\tList list = (List) map.get("LIST");

\t\t\t// excel头部

\t\t\tString[] headNames = (String[]) map.get("HEAD");

\t\t\t// excel头部对应的表字段

\t\t\tString[] fieldNames = (String[]) map.get("FIELD");

\t\t\t// 创建Excel的工作书册 Workbook,对应到一个excel文档

\t\t\tHSSFWorkbook wb = new HSSFWorkbook();

\t\t\t// 页数

\t\t\tint pages = 1;

\t\t\t// 获取总页数

\t\t\tif (list.size() > 50000) {

\t\t\t\tif (list.size() % 50000 == 0)

\t\t\t\t\tpages = list.size() / 50000;

\t\t\t\telse

\t\t\t\t\tpages = list.size() / 50000 + 1;

\t\t\t}

\t\t\t// 数据下标

\t\t\tint b = 0;

\t\t\t// 循环页数

\t\t\tfor (int k = 1; k <= pages; k++) {

\t\t\t\t/***************** 创建页 *****************/

\t\t\t\t// 创建Excel的工作sheet,对应到一个excel文档的tab

\t\t\t\tHSSFSheet sheet = wb.createSheet("第" + k + "页");

\t\t\t\t// 设置excel每列宽度

\t\t\t\tsheet.setColumnWidth(0, 4000);

\t\t\t\tsheet.setColumnWidth(1, 3500);

\t\t\t\t// 创建字体样式

\t\t\t\tHSSFFont font = wb.createFont();

\t\t\t\tfont.setFontName("Verdana");

\t\t\t\tfont.setBoldweight((short) 100);

\t\t\t\tfont.setFontHeight((short) 300);

\t\t\t\tfont.setColor(HSSFColor.BLUE.index);

\t\t\t\t// 创建单元格样式

\t\t\t\tHSSFCellStyle style = wb.createCellStyle();

\t\t\t\tstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

\t\t\t\tstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

\t\t\t\t// 设置边框

\t\t\t\tstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);

\t\t\t\tstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);

\t\t\t\tstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);

\t\t\t\tstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);

\t\t\t\t/*********** 创建页 ****************/

\t\t\t\t/***************** 创建标题和表头 *****************/

\t\t\t\t// 创建行

\t\t\t\tHSSFRow row = sheet.createRow(0);

\t\t\t\trow.setHeight((short) 500);// 设定行的高度

\t\t\t\t// 循环创建标题列

\t\t\t\tfor (int i = 0; i < headNames.length; i++) {

\t\t\t\t\t// 创建一个Excel的单元格

\t\t\t\t\tHSSFCell cell = row.createCell(i);

\t\t\t\t\tcell.setCellStyle(style);

\t\t\t\t\tcell.setCellValue(headNames[i]);

\t\t\t\t}

\t\t\t\t/*********** 创建标题和表头 ****************/

\t\t\t\t/*********** 添加内容 ****************/

\t\t\t\t// 行

\t\t\t\tint i = 0;

\t\t\t\tfor (; b < list.size(); b++) {

\t\t\t\t\t// 起始为第2行

\t\t\t\t\ti++;

\t\t\t\t\t// 创建行

\t\t\t\t\trow = sheet.createRow((i));

\t\t\t\t\trow.setHeight((short) 500);// 设定行的高度

\t\t\t\t\t// 获取该行应输出的对象map

\t\t\t\t\tMap tempMap = (Map) list.get(b);

\t\t\t\t\tfor (int j = 0; j < fieldNames.length; j++) {

\t\t\t\t\t\t// 创建一个Excel的单元格

\t\t\t\t\t\tHSSFCell cell = row.createCell(j);

\t\t\t\t\t\tcell.setCellStyle(style);

\t\t\t\t\t\t// 取该列对应的值

\t\t\t\t\t\tObject temp = tempMap.get(fieldNames[j]);

\t\t\t\t\t\tif (StringUtil.isNull(temp))

\t\t\t\t\t\t\tcell.setCellValue("");

\t\t\t\t\t\telse {

\t\t\t\t\t\t\tif (fieldNames[j].equals("BILL_NO")) {

\t\t\t\t\t\t\t\tcell.setCellValue(temp.toString());

\t\t\t\t\t\t\t} else {

\t\t\t\t\t\t\t\ttry {

\t\t\t\t\t\t\t\t\tcell.setCellValue(Double.parseDouble(temp

\t\t\t\t\t\t\t\t\t\t\t.toString()));

\t\t\t\t\t\t\t\t} catch (Exception e) {

\t\t\t\t\t\t\t\t\tcell.setCellValue(temp.toString());

\t\t\t\t\t\t\t\t}

\t\t\t\t\t\t\t}

\t\t\t\t\t\t}

\t\t\t\t\t}

\t\t\t\t\t// 一页写完

\t\t\t\t\tif (b % 50000 == 0 && b != 0) {

\t\t\t\t\t\tb++;

\t\t\t\t\t\tbreak;

\t\t\t\t\t}

\t\t\t\t}

\t\t\t\t/*********** 添加内容 ****************/

\t\t\t}

\t\t\twb.write(new FileOutputStream(new File("D:\\Documents\\Desktop\\exscop.xls")));

\t\t}catch(Exception e){

\t\t\te.printStackTrace();

\t\t}

\t}

}

我这个案例你可以看下、

查一下api吧 如果是 FileWriter

public FileWriter(File file,

boolean append)

throws IOException根据给定的 File 对象构造一个 FileWriter 对象。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。

java如何文件里写数据

: import java.io.File ;import java.io.OutputStream ;import java.io.FileOutputStream ;public class OutputStreamDemo01{ public static void main(String args[]) throws Exception{ // 异常抛出,不处理 // 第1步、使用File类找到一个文件 File f= new File("d...

关于Java中向文件写入数据的问题

: 我只知道使用stringbuffer类会好很多.当然前提是导入IO包,创流,传给buffer,再刷新.既然您是写入文本文件的,那么就可以先tostring一下,然后写字符串.不过这,有一个缺陷,目前想不出更好的解决办法.(作为菜鸟,我就只能说这么多了.说的不对,还望见谅啊.)

哪位朋友会用JAVA编写往文件中写数据?? -

: 参考如下,既有读也有写2. 有一个文件,请读出该文件,并将其中的“nwe”改为“new”,注:不能将如“pnwe”改为“pnew”.public void testFileRead() throws Exception{ FileInputStream fis = null; InputStreamReader isr = null; ...

java 在文件里面读写数据 -

: 首先你得System.exit(0)不要滥用 用一个控制变量操作程序的进程,你得input是个Scanner类型的变量肿么往数组里写啊 要有一个读的io流啊 创建一个read 或者outputStreanm累心的对象用来读取文件内容

java中怎么向文件中读写数据

: 根据文件路径创建Java.io.File对象,然后通过FileOutputStream获得文件内容.如果是结构化数据则需要相应的解析类.

用java将数据写入文件

: 不支持直接在文件的最前面插入一行.实现这个功能的大概步骤是:1、新建个临时文件.2、在临时文件中写入新数据.3、把老文件中的数据都复制到临时文件中.4、删除老文件.5、临时文件重命名为老文件的名字.

JAVA把数据输入到文件里

: 直接将改完后的完整数据流在相同的地方保存为同名文件就行了 3行字符 声明成3个字符串 str1 str2 str3 , str1 = "jasper"+a; str2 = "sky"+b; str3 = "eco"+c; a、b、c就是你要改成的数字串了. String lineSep = System.getProperty("line....

JAVA中如何将生成的数据写入到文件 -

: 简单一点的用apache 的common io包下面的FileUtils类 public static void main(String[] args) throws Exception{ FileUtils.writeStringToFile(new File("d:/1.txt"), new String("abcdefg")) ; }

java:往文件中写数据,新写入的数据总是覆盖原有数据,怎么能实现追加功能呢? -

: java中,对文件进行追加内容操作的三种方法!import java.io.bufferedwriter; import java.io.fileoutputstream; import java.io.filewriter; import java.io.ioexception; import java.io.outputstreamwriter; import java.io.printwriter; import java.io....

java向文件中写入数据的问题

: 1.inFromServer是什么2.output.txt在什么目录下面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值