Java语言 有关xml文件写的过程中,出现异常导致文件为空的情况

程序运行到一个地方,需要将原有.xml删除,新建该文件,重新写文件中的内容。但是使用过程中发现,会出现xml文件内容为空的情况,该如何解决?只是单纯的捕获异常有效果吗?还... 程序运行到一个地方,需要将原有.xml删除,新建该文件,重新写文件中的内容。但是使用过程中发现,会出现xml文件内容为空的情况,该如何解决?只是单纯的捕获异常有效果吗?
还有,其实执行过程中只需要修改一个标签中的内容,可是这样需要先定位标签的位置(读文件),再修改内容(写文件),这样做的话会比单纯的重新写容易实现吗?
展开
 我来答
fuhaiwei
2014-12-09 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1385万
展开全部

其实你应该在程序中构建一个模型和文件内容相对应,就好修改了。

如读取文件,构建模型,修改模型,写入文件。

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Main {
   public static void main(String[] args) {
      User user = new User("admin", "111111", new Adress("New York"));
      addUser(user);
      catXmlFile();
      updatePassword("admin", "123456");
      catXmlFile();
   }

   public static boolean addUser(User user) {
      List<User> users = loadXmlForUsers();

      for (User user1 : users) {
         if (user1.getUsername().equals(user)) {
            return false;
         }
      }
      users.add(user);
      writeXmlForUser(users);
      return true;
   }


   public static void updatePassword(String username, String password) {
      List<User> users = loadXmlForUsers();

      for (User user : users) {
         if (user.getUsername().equals(username)) {
            user.setPassword(password);
         }
      }

      writeXmlForUser(users);
   }

   public static void catXmlFile() {
      try {
         System.out.println("==============");
         BufferedReader br = new BufferedReader(new FileReader("users.xml"));
         while (br.ready()) {
            System.out.println(br.readLine());
         }
         br.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }


   public static void writeXmlForUser(List<User> users) {
      try {
         XMLEncoder encoder = new XMLEncoder(new FileOutputStream("users.xml"));
         encoder.writeObject(users);
         encoder.flush();
         encoder.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      }
   }

   public static List<User> loadXmlForUsers() {
      List<User> users;
      try {
         XMLDecoder decoder = new XMLDecoder(new FileInputStream("users.xml"));
         users = (List<User>) decoder.readObject();
         decoder.close();
      } catch (Exception e) {
         users = new ArrayList<>();
      }
      return users;
   }

   public static class User {
      private String username;
      private String password;
      private Adress adress;

      public User() {
      }

      public User(String username, String password, Adress adress) {
         this.username = username;
         this.password = password;
         this.adress = adress;
      }

      public String getUsername() {
         return username;
      }

      public void setUsername(String username) {
         this.username = username;
      }

      public String getPassword() {
         return password;
      }

      public void setPassword(String password) {
         this.password = password;
      }

      public Adress getAdress() {
         return adress;
      }

      public void setAdress(Adress adress) {
         this.adress = adress;
      }
   }

   public static class Adress {
      private String name;

      public Adress() {
      }

      public Adress(String name) {
         this.name = name;
      }

      public String getName() {
         return name;
      }

      public void setName(String name) {
         this.name = name;
      }
   }

}
追问
你好,我这个问题主要出现在Android运行过程中的,有什么好建议。
追答
总之,肯定要自己写一个,readFromXml,writeToXml,然后在程序中构建为一个模型,针对模型操作,这样会一劳永逸。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式