java - 将数组写入输出文件

时间:2014-12-06 09:01:17

标签: java arrays

我是java的新手,我的方法需要帮助。

所以我需要创建flagOverdueOwners(CarOwner [] inArray)方法,该方法为注册已过期的车辆生成并返回一个数组。这被定义为超过12个月的注册,基于当前REG_MONTH为4,REG_YEAR为2014

所以这是我在RegistrationMethods类中的flagOverdueOwners方法:

public class RegistrationMethods implements Serializable{

final int REG_MONTH = 4;
final int REG_YEAR = 2014;
public CarOwner[] flagOverdueOwners(CarOwner[] inArray)
{


    // insert code to compare that are earlier than 4/2013

    temp = inArray;



    return temp;}

}

这是我的主要方法:

public static void main (String [] args)
{
 PrintWriter outputStream = null;

    outputStream = new PrintWriter (new FileOutputStream ("output.txt", true));
    CarOwner arr[] = dmv.flagOverdueOwners(ItStateCopy)
    outputStream.println("\nOwners with Expired Registration");

    for (int i = 0 ; i < arr.length ; i++)
    {
        outputStream.println(arr[i]);
    }


    outputStream.close();
}

我的output.txt应该是conatin:

已过期注册的所有者

Tasmanian Devil STU-789 10/2012

西尔维斯特猫NQR-456 1/2013

Yosemite Sam FGH-123 3/2013

(并且有一堆列表在2013年4月之后)

这是我的CarOwner课程:

public class CarOwner extends Citizen implements CarOwnerInterface, Serializable, Comparable
{
private String license;
private int month, year;

public CarOwner()
{
    super();
    license = "Not Assigned";
    month = 0;
    year = 0;        
}

public CarOwner(String inFirst, String inLast, String inLicense, int inMonth, int inYear)
{
    super(inFirst, inLast);
    license = inLicense;
    month = inMonth;
    year = inYear;
}

public void setLicense(String inLicense)
{
    license = inLicense;
}

public String getLicense()
{
    return license;
}

public void setMonth(int inMonth)
{
    month = inMonth;
}

public int getMonth()
{
    return month;
}

public void setYear(int inYear)
{
    year = inYear;
}

public int getYear()
{
    return year;
}

public int compareTo(Object o)
{
    if ((o != null) && (o instanceof CarOwner))
    {
        CarOwner otherOwner = (CarOwner) o;
        if (otherOwner.getYear() > getYear())
            return -1;
        else if (otherOwner.getYear() < getYear())
            return 1;
        else if  (otherOwner.getMonth() > getMonth())
            return -1;
        else if  (otherOwner.getMonth() < getMonth())
            return 1;
        else 
            return 0;
    }

    return -1;
}

public String toString()
{
    String str;

    str = getLastName() +" " + getFirstName() + "\t\t" + license + "\t\t" + month + "/" + year;

    return str;
}
}

如果日期早于2013年4月,我应该如何编码进行比较?

非常感谢任何帮助或建议!

2 个答案:

答案 0 :(得分:0)

像“[LCarOwner; @ c9bf922”这样的东西是打印出CarOwner个对象时得到的。

在这一行:

outputStream.println(dmv.flagOverdueOwners(ItStateCopy));

println方法将在toString返回的数组上调用dmv.flagOverdueOwners(ItStateCopy)。数组的默认toString方法产生类似“[LCarOwner; @ c9bf922”。

如果您想要很好地格式化它,请使用Arrays.toString

outputStream.println(Arrays.toString(dmv.flagOverdueOwners(ItStateCopy)));

答案 1 :(得分:0)

你必须写出血清和去除方法。 serilization方法将所有属性转换为字节,deserilization方法将使用它来构造对象。

但是,java中有更简单的方法。您已经为CarOwner实现了Serializable接口,并使用ObjectOutputStream将其写入文件,并使用ObjectInputStream从文件中读取它。所以

 ObjectOutputStream outputStream = new ObjectOutputStream (new FileOutputStream ("output.txt", true));

    CarOwner arr[] dmv.flagOverdueOwners(ItStateCopy)
    for (int i = 0 ; i < arr.length ; i++)
    {
        outputStream.writeObject(arr[i]);
    }