FileOutputStream打开一个新文件,并在创建文件时将其删除

我正在处理文件中的序列化和反序列化。而且,我正在堆叠使用FileOutputStreamwith

ObjectOutputStream。问题是我有服务器/客户端聊天应用程序,无论何时连接客户端,服务器都必须检查连接的客户端是否已注册。因此,当客户端连接到服务器时,服务器会创建一个输出流,例如

FileOutputStream fos = new FileOutputStream("src\\example\\mainList.txt");

获取链接列表以检查此列表是否包含此对象。但是,FileOutputStream总是创建一个没有内容的新文件。我知道是否将“

true”值作为附加文件的第二个参数传递,但是此.txt文件应仅包含一个对象,该对象为链表。因此,我不想在每个过程中都添加一个列表。我该如何处理问题?我只想要

  • 如果有专用文件,没有内容,则不读取对象,仅第一次添加列表
  • 如果存在具有内容的指定文件(意味着只有一个链表对象),则将其读取,然后将新客户端添加到列表中,并将链表对象写回到该文件中。

希望我对您的问题有所了解,我将为您的每一个答复表示感谢。所以还是谢谢

编辑:这是我要说的简单例子。

public class PersonTest2 {

public static void main(String[] args) throws IOException, ClassNotFoundException {

LinkedList<Person> list = new LinkedList<Person>();

Person per = new Person("John","Thompson",22);

Person per2 = new Person("Suzie","Cash",23);

Person per3 = new Person("Peter","Jackson",24);

Person per4 = new Person("Michael","Coch",25);

list.add(per);

list.add(per2);

list.add(per3);

list.add(per4);

FileOutputStream fos = new FileOutputStream("person.txt");

BufferedReader br = new BufferedReader(new FileReader("person.txt"));

if (br.readLine() == null ) {

System.out.println("No errors, and file is empty");

}

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(list);

fos.close();

FileInputStream fis = new FileInputStream("person.txt");

ObjectInputStream ois = new ObjectInputStream(fis);

LinkedList<Person> list2;

list2 = (LinkedList) ois.readObject();

for (Iterator<Person> itr = list2.iterator(); itr.hasNext();) {

Person rper = itr.next();

System.out.println(rper.name + " " + rper.last_name + " " + rper.age);

}

}

}

每次我运行这段代码FileOutputStream都会打开一个新文件。但是,如果我使用true第二个参数,它将附加链表。

回答:

  • 如果有专用文件,没有内容,则不读取对象,仅第一次添加列表
  • 如果存在具有内容的指定文件(意味着只有一个链表对象),则将其读取,然后将新客户端添加到列表中,并将链表对象写回到该文件中。

您可以通过以下方式执行此操作:

File file = new File("person.txt");

boolean toWrite = false;

boolean toModify = false;

if (file.exists())

{

if (file.length() == 0)

{

toWrite = true;

}

else

{

toModify = true;

}

}

if (toWrite || !file.exists())

{

FileOutputStream fos = new FileOutputStream(file);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(list);

fos.close();

oos.close();

}

else if (toModify)

{

FileInputStream fins = new FileInputStream(file);

ObjectInputStream oins = new ObjectInputStream(fins);

LinkedList<Person> temp = (LinkedList<Person>)oins.readObject();

fins.close();

oins.close();

temp.add(per);

temp.add(per2);

temp.add(per3);

temp.add(per4);

FileOutputStream fos = new FileOutputStream(file);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(temp);

fos.close();

oos.close();

}

以上是 FileOutputStream打开一个新文件,并在创建文件时将其删除 的全部内容, 来源链接: utcz.com/qa/418097.html

回到顶部