想要从 beanIO 字段名称标签在 csv 中写入标题

2024-05-08

我想在 csv 文件中写入标题,因为我的文本文件不包含任何标题,所以我想从 beanIO 字段名称标签写入它

我有一个 beanIO 有两个流,一个用于读取,另一个用于写入

这是输入文件.... 文本输入.txt-
1 约翰·露 BA xxx
1萨姆·哈特 马 yyy

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

    StreamFactory factory = StreamFactory.newInstance();

    factory.load("C:\\Users\\PV5057094\\Demo_workspace\\XlsxMapper\\src\\main\\resources\\Employee.xml");


BeanReader br = factory.createReader("EmployeeInfo",new File("C:\\Temp\\Soc\\textInput.txt"));

    BeanWriter out = factory.createWriter("EmployeeInfoCSV", new File("C:\\Temp\\Soc\\output.csv"));



    Object record;

    while ((record=br.read())!=null) {


        out.write(record);

        System.out.println("Record Written:" + record.toString());

    }

    // in.close();
    out.flush();
    out.close();
   }

}


BeanIO-

<?xml version="1.0" encoding="UTF-8"?>
<beanio xmlns="http://www.beanio.org/2012/03"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">

    <stream name="EmployeeInfo" format="fixedlength">

        <record name="a" minOccurs="0" maxOccurs="unbounded"
            class="com.aexp.gmnt.imc.record.submission.Employee">
            <field name="record" length="1" literal="1" rid="true"/>
            <field name="firstName" length="5"/>
            <field name="lastName" length="5"/>
            <field name="title" length="5"/>
            <field name="filler" length="5"/>
        </record>

    </stream>


    <stream name="EmployeeInfoCSV" format="csv">
        <record name="a" minOccurs="0" maxOccurs="unbounded"
            class="com.aexp.gmnt.imc.record.submission.Employee">
            <field name="record" length="1" literal="1" rid="true"/>
            <field name="firstName" length="5"/>
            <field name="lastName" length="5"/>
            <field name="title" length="5"/>
            <field name="filler" length="5"/>
        </record>
    </stream>
</beanio>

预期产出-

记录、名字、姓氏、头衔、填充符
1、约翰、露、BA、xxx
1、萨姆、哈特、MA、yyy


你必须定义一个新的record在你的EmployeeInfoCSV流定义将包含列名称作为字段的默认值,例如

<record name="headers" minOccurs="1" maxOccurs="1">
  <field name="recordColumn" default="Record"/>

然后你必须告诉你的BeanWriter在输出文件的其余部分之前首先写出“标头”记录。

out.write("headers", null);

您还必须更改length属性上的a在您的 CSV 流中记录为maxLength,否则你会在输出上得到填充,并且它看起来仍然像固定长度格式。

Change

<field name="firstName" length="5"/>

to

<field name="firstName" maxLength="5"/>

将所有这些放在一起:

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

  StreamFactory factory = StreamFactory.newInstance();
  factory.load("C:\\Users\\PV5057094\\Demo_workspace\\XlsxMapper\\src\\main\\resources\\Employee.xml");

  BeanReader br = factory.createReader("EmployeeInfo",new File("C:\\Temp\\Soc\\textInput.txt"));
  BeanWriter out = factory.createWriter("EmployeeInfoCSV", new File("C:\\Temp\\Soc\\output.csv"));

  // write the column headers to the output file
  out.write("headers", null);

  Object record;
  while ((record=br.read())!=null) {
    out.write(record);
    System.out.println("Record Written:" + record.toString());
  }

  br.close();  // yes, also close the reader
  out.flush();
  out.close();
}

以及映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<beanio xmlns="http://www.beanio.org/2012/03"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">

  <stream name="EmployeeInfo" format="fixedlength">
      <record name="a" minOccurs="0" maxOccurs="unbounded"
          class="com.aexp.gmnt.imc.record.submission.Employee">
          <field name="record" length="1" literal="1" rid="true"/>
          <field name="firstName" length="5"/>
          <field name="lastName" length="5"/>
          <field name="title" length="5"/>
          <field name="filler" length="5"/>
      </record>
  </stream>

  <stream name="EmployeeInfoCSV" format="csv">
    <record name="headers" minOccurs="1" maxOccurs="1">
      <field name="recordColumn" default="Record"/>
      <field name="firstNameColumn" default="FirstName"/>
      <field name="lastNameColumn" default="LastName"/>
      <field name="titleColumn" default="Title"/>
      <field name="fillerColumn" default="Filler"/>
    </record>
    <record name="a" minOccurs="0" maxOccurs="unbounded" 
            class="com.aexp.gmnt.imc.record.submission.Employee">
      <field name="record" length="1"/>
      <field name="firstName" maxLength="5"/>
      <field name="lastName" maxLength="5"/>
      <field name="title" maxLength="5"/>
      <field name="filler" maxLength="5"/>
    </record>
  </stream>
</beanio>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

想要从 beanIO 字段名称标签在 csv 中写入标题 的相关文章

  • java本地时间格式不带年份

    我喜欢将本地时间格式格式化为不带年份的字符串 目前我可以显示包含年份的本地格式 java text DateFormat df java text DateFormat getDateInstance java text DateForma
  • 我该如何解决? KnapSack - 值完全相同,但每个对象都有三个权重

    我在解决我的练习时遇到问题 我读到了动态规划和算法 我认为我的练习是 特定背包问题 我用暴力法解决了它 但我无法用动态规划解决它 我有一艘重300吨的船 背包 有些晶体本身含有 3 种物质 X Y Z 每种物质都有重量 并且所有晶体都具有相
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • 术语“引用”的起源,如“通过引用传递”

    Java C 语言律师喜欢说他们的语言按值传递引用 这意味着 引用 是调用函数时复制的对象指针 同时 在 C 中 以及 Perl 和 PHP 中更动态的形式 引用是其他名称 或动态情况下的运行时值 的别名 我对这里的词源感兴趣 参考 一词的
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • 使用 Hibernate 和 Apache DBCP 的 MySQL 连接池问题

    看来我的应用程序有问题 当应用程序在启动后闲置很长时间 我不确定确切的时间 时 我会在日志中收到以下错误消息 我使用 Spring Hibernate MySQL 和 ApacheDBCP 进行连接池 ERROR org hibernate
  • 如何让 HttpClient 返回状态码和响应正文?

    我试图让 Apache HttpClient 触发 HTTP 请求 然后显示 HTTP 响应代码 200 404 500 等 以及 HTTP 响应正文 文本字符串 重要的是要注意我正在使用v4 2 2因为大多数 HttpClient 示例都
  • 如何显示/隐藏jsf组件

    在我的一个 JSF 应用程序中 顶部的标题部分包含 selectOneMenu 底部的内容部分显示过滤器组件 默认情况下 应用程序首先在顶部显示 selectOneMenu 数据 在底部显示相应的 Filter 信息 如果用户选择不同的se
  • 如何使 ScheduledExecutorService 在计划任务取消时自动终止

    我正在使用一个ScheduledExecutorService如果网络连接已打开超过几个小时 则关闭该连接 然而 在大多数情况下 网络连接在超时之前就关闭了 所以我取消了ScheduledFuture 在这种情况下 我还希望执行程序服务终止
  • 在 SWT 中单击鼠标触发事件?

    在SWT中 对于MouseListener接口 可用的方法有mouseUp mouseDown and mouseDoubleClick 如何根据用户点击触发事件 我们可以通过结合来做到这一点mouseUp and mouseDown 但没
  • 整数与 int 比较

    我是新来的java 我现在正在学习非原始整数类型java 我知道以下比较无效并引发编译错误 String str c Char chr c if str chr return true 上面的代码片段给了我 Test java lineNu
  • 维护插入顺序的并发集合[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以维护插入顺序的并发列表 有人有什么好的推荐吗 我看一些番石榴 例如SetFromMa
  • 在 Java Swing 元素中使用 HTML 样式是不好的做法吗?

    使用 HTML 设置 Swing 元素的样式被认为是不好的做法吗 举个例子 如果我想让标签变大并变红一次 我有两个选择 使用 API 调用 JLabel label new JLabel This is a title label setF
  • 为什么java(>=7版本)不支持运行没有main方法的程序? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 class WithoutMain static System out println Without main class Sy
  • 有界通配符相关的编译器错误

    我想知道这段代码有什么问题 Map 但我试图说得更具体 这个问题在这个旧的 Apache 线程 ht
  • java.lang.ClassCastException: [B 无法转换为 java.lang.String

    我编写了一个带有字段 LoginId 和密码的实体类 我使用 AES ENCRYPT 加密密码并将其存储在数据库中 我只想检索已解密的密码 所以 我使用 AES DECRYPT 使用本机查询是在 OPen JPA 2 0 中 我写的查询是
  • 如何在Java中通过反射调用代理(Spring AOP)上的方法?

    一个接口 public interface Manager Object read Long id 实现该接口的类 Transactional Public class ManagerImpl implements Manager Over
  • 使用 InputStream 通过 TCP 套接字接收多个图像

    每次我从相机捕获图像时 我试图将多个图像自动从我的 Android 手机一张一张地发送到服务器 PC 问题是read 函数仅在第一次时阻塞 因此 从技术上讲 只有一张图像被接收并完美显示 但在那之后当is read 回报 1 该功能不阻塞
  • 文档过滤器在 Java 中不起作用?

    在超过 10 个字符的文本字段中 它必须显示错误 为此 我使用了文档过滤器 JTextField field JTextField txtFld AbstractDocument document AbstractDocument fiel
  • 从数字列表中生成所有唯一对,n 选择 2

    我有一个元素列表 假设是整数 我需要进行所有可能的两对比较 我的方法是 O n 2 我想知道是否有更快的方法 这是我在java中的实现 public class Pair public int x y public Pair int x i

随机推荐