【问题标题】:Writing object in text file在文本文件中写入对象
【发布时间】:2013-10-01 03:49:41
【问题描述】:

我正在尝试在文本文件中写入一个对象(事务)。 Transaction 对象包含卡号、金额、日期。 我需要将对象写入文本文件中,如下所示。

 Card no      Amount      Date

  12335       900.00     29/09/2010

我使用 ObjectOutputStream 将对象写入文件。但在这种情况下,我无法给出差距。

如何将事务对象写在有间隙的文件中,以便与header对齐?

感谢任何帮助

【问题讨论】:

  • 您尝试过的代码在哪里?
  • 你不能用这种方式序列化一个对象,你需要将文本表示的“文本”写入一个文本文件,使用可能像String#format
  • 反序列化将为您提供与序列化相同的对象。阅读这篇文章stackoverflow.com/questions/11653374/…

标签: java file-io


【解决方案1】:

您为什么担心 ObjectOutputStream 中的空白。它主要用于写入文件和重新创建对象。如果您想使用它以人类可读的格式将其写入文件,建议您使用普通文件输出流而不是对象输出流。

【讨论】:

  • 感谢您的快速回复。在正常的文件输出流中,如何提供间隙并将其一次性写入文件?
  • @Ramya 希望这个链接能帮助到tutorialspoint.com/java/java_filewriter_class.htm
  • 使用文件写入器我能够写出没有间隙的对象。如何指定位置写对象在这个位置。
【解决方案2】:

我不知道你的 Transaction 对象是什么样子的。但这应该提供一些线索。注意 System.out.printf()。您可以替换自己的输出流。我在 Calendar 对象上添加了一些额外的东西,以便您了解它...

private class Transaction {
    public int cardno;
    public BigDecimal amt;
    public Date someDate;
}

public void zz2() {
    Transaction t = new Transaction();
    t.cardno = 12335;
    t.amt = new BigDecimal("900.00");

    Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"));
    cal.set( Calendar.YEAR,        2013 );
    cal.set( Calendar.MONTH,       9);  // zero offset so 9 = Oct              
    cal.set( Calendar.DATE,        1 ); // NOT zero offset...                  
    cal.set( Calendar.HOUR_OF_DAY, (15) );  // 3PM                             
    cal.set( Calendar.MINUTE,      30 );
    cal.set( Calendar.SECOND,      44 );
    cal.set( Calendar.MILLISECOND, 700 );

    t.someDate = cal.getTime();

    DateFormat df = new SimpleDateFormat("MM/dd/yyyy");

    String s = df.format(t.someDate);

    System.out.println("Card no      Amount      Date");
    System.out.printf ("%6d %12s   %10s\n",
                      t.cardno,
                      t.amt,
                      s);
}

【讨论】:

    【解决方案3】:

    也许我遗漏了一些东西,但是您是否尝试过在需要间隙的位置使用制表符(在字符串中转义到“\t”)?

    System.out.println("Card no\tAmount\tDate");
    

    同样适用于您输出值的 println 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 2013-09-11
      • 2017-11-06
      • 2016-09-10
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多