在java中创建一个txt文件,然后在java中再次读出来

时间:2015-10-11 14:48:07

标签: java

所以我首先通过p个对象创建了一个人物

box1:
public static Person[] createPersons(int p) {

people = new Person[p];
    for(int i=0; i < p; i++) {
        people[i] = new Person("Mr. Persons" + i, 20 + i, 'M');
    }

    menuSelection();
    return people;
}

我将其写入文本文件:

box2:
public static void writePersons (Person[] person, String filePerson){

    if (people != null) {

    try (FileOutputStream fs = new FileOutputStream(filePerson)) {

        ObjectOutputStream os = new ObjectOutputStream(fs);

        os.writeInt(p);
        os.writeObject(people);

        os.close();

    } catch (IOException e) {
        e.printStackTrace();
        }
    System.out.println(p+" Person written successfully to " + filePerson);

    } else {
        System.out.println("Nothing to write.");
    }

    menuSelection();
}

所以在java中它看起来像这样:

box3:
Mr. Person0     20      M
Mr. Person1     21      M
Mr. Person2     22      M
Mr. Person3     23      M
Mr. Person4     24      M
Mr. Person5     25      M

但是当我打开我的文本文件时,它看起来像这样:

¬í w   ur   [LPerson;4Ýd
—ì-b  xp   sr Person        I ageC genderL namet Ljava/lang/String;xp    Mt 
Mr. Person0sq ~     Mt 
Mr. Person1sq ~     Mt 
Mr. Person2sq ~     Mt 
Mr. Person3sq ~     Mt 
Mr. Person4sq ~     Mt 
Mr. Person5

如何再次读出这个文本文件?并将其放入java中的样式(参见方框3)

4 个答案:

答案 0 :(得分:1)

您可以这样写:

PrintWriter printWriter = new PrintWriter ("D:\\test.txt");
printWriter.println (p.getName());
printWriter.print (p.getSex());
printWriter.print (p.getAge());
printWriter.close ();  

答案 1 :(得分:0)

你需要编写字符串而不是对象, 最好创建一个toString()方法并相应地使用。

答案 2 :(得分:0)

为了使用writeObject读取您使用Java写入文件的对象,您必须在文件上使用readObjectObjectInputStream)。

推荐documentation关于ObjectOutputStream

  

writeObject方法用于将对象写入流。任何对象,包括字符串和数组,都是用writeObject编写的。可以将多个对象或基元写入流。必须从相应的ObjectInputstream中读取对象,其类型和顺序与写入时的顺序相同。

因此,在您的情况下,您必须阅读以下内容:

try (FileInputStream fis = new FileInputStream(filePerson)) {
    ObjectInputStream ois = new ObjectInputStream(fis);
    int p = ois.readInt();
    Person[] persons = new Person[p];
    for (int i = 0; i < p; i++) {
        persons[i] = (Person)ois.readObject();
    }
    ois.close();
}

答案 3 :(得分:-1)

不要使用ObjectOutStream。那是计算机术语。你只需要PrintWriter。