将之前的在文件中进行存取的操作,更新为使用dom4j技术解析XML文件实现,并且在退出时,选择保存到xml还是不保存。与之前的差别不大,比较简单易懂。直接上代码。
包结构如下:
Book.java
package com.biubiubiu.bookmgr.pojo;
import java.util.Date;
import com.biubiubiu.bookmgr.util.Utils;
/**
* 图书类实体类bean
* @author dell
*
*/
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book implements Comparable<Book>{
private String bookno;
private String bookname;
private Date booktime;
@Override
public int compareTo(Book o) {
String one=Utils.dateToStr(this.getBooktime());
String two=Utils.dateToStr(o.getBooktime());
return one.compareTo(two);
}
}
BookDAO.java
package com.biubiubiu.bookmgr.dao;
import java.util.List;
import com.biubiubiu.bookmgr.pojo.Book;
public interface BookDAO {
// 查询图书
List<Book> select();
// 添加图书
void add(Book book);
// 修改图书
Book update(int index, Book book);
// 删除图书
boolean delete(int index);
// 根据图书编号返回下标
int getIndex(String bookId);
}
BookDAOImpl.java
package com.biubiubiu.bookmgr.dao.daoimpl;
/**
* 处理数据,具体实现
*/
import java.util.ArrayList;
import java.util.List;
import com.biubiubiu.bookmgr.dao.BookDAO;
import com.biubiubiu.bookmgr.pojo.Book;
import com.biubiubiu.bookmgr.util.Utils;
public class BookDAOImpl implements BookDAO {
public static List<Book> books = new ArrayList<Book>();
static {
String bookstrs = Utils.readXML();
String[] booksn = bookstrs.split("\n");
for (String str : booksn) {
String values[] = str.split(",");
Book book = new Book(values[0], values[1], Utils.strToDate(values[2]));
books.add(book);
}
}
// 查询图书
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.dao.BookDAO#select()
*/
@Override
public List<Book> select() {
return books;
}
// 添加图书
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.dao.BookDAO#add(com.biubiubiu.bookmgr.pojo.Book)
*/
@Override
public void add(Book book) {
books.add(book);
Utils.writeXML(book);
}
// 修改图书
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.dao.BookDAO#update(int, com.biubiubiu.bookmgr.pojo.Book)
*/
@Override
public Book update(int index, Book book) {
Book bookChange = books.set(index, book);
return bookChange;
}
// 删除图书
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.dao.BookDAO#delete(int)
*/
@Override
public boolean delete(int index) {
return books.remove(index) != null ? true : false;
}
// 根据图书编号返回下标
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.dao.BookDAO#getIndex(java.lang.String)
*/
@Override
public int getIndex(String bookId) {
int index = -1;
for (int i = 0; i < books.size(); i++) {
if (books.get(i).getBookno().equalsIgnoreCase(bookId)) {
index = i;
}
}
return index;
}
}
BookService.java
package com.biubiubiu.bookmgr.service;
import java.util.List;
import com.biubiubiu.bookmgr.pojo.Book;
public interface BookService {
//查询图书数据业务(排序)
List<Book> selectBooks();
//添加图书数据操作
String addBook(Book book);
//更新图书数据操作
String updateBook(int index, String type, String value);
//删除图书数据操作
String deleteBook(int index);
}
BookServiceImpl.java
package com.biubiubiu.bookmgr.service.serviceimpl;
/**
* 业务层
* @author 11142
*
*/
import java.util.Collections;
import java.util.List;
import com.biubiubiu.bookmgr.dao.daoimpl.BookDAOImpl;
import com.biubiubiu.bookmgr.pojo.Book;
import com.biubiubiu.bookmgr.service.BookService;
import com.biubiubiu.bookmgr.util.ObjectFactory;
import com.biubiubiu.bookmgr.util.Utils;
public class BookServiceImpl implements BookService {
BookDAOImpl bookDAOImpl;
public BookServiceImpl() {
bookDAOImpl = ObjectFactory.getInstance(Utils.B_D);
}
//查询图书数据业务(排序)
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.service.BookService#selectBooks()
*/
@Override
public List<Book> selectBooks(){
List<Book> booklist=bookDAOImpl.select();
Collections.sort(booklist);
return booklist;
}
//添加图书数据操作
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.service.BookService#addBook(com.biubiubiu.bookmgr.pojo.Book)
*/
@Override
public String addBook(Book book) {
String message = "";
int index = bookDAOImpl.getIndex(book.getBookno());
if(index == -1) {
bookDAOImpl.add(book);
message = "添加成功";
}else {
message="添加失败!图书编号已存在!";
}
return message;
}
//更新图书数据操作
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.service.BookService#updateBook(int, java.lang.String, java.lang.String)
*/
@Override
public String updateBook(int index, String type, String value) {
String message = "修改成功~";
Book book = bookDAOImpl.select().get(index);
if(type.equalsIgnoreCase("a")) {
book.setBookno(value);
}else if (type.equalsIgnoreCase("b")) {
book.setBookname(value);
}else if (type.equalsIgnoreCase("c")) {
book.setBooktime(Utils.strToDate(value));
}else {
message = "你的输入有误~";
}
Utils.updateXML();
return message;
}
//删除图书数据操作
/* (non-Javadoc)
* @see com.biubiubiu.bookmgr.service.BookService#deleteBook(int)
*/
@Override
public String deleteBook(int index) {
String message = "删除成功";
Book book = bookDAOImpl.select().get(index);
bookDAOImpl.books.remove(book);
Utils.updateXML();
return message;
}
}
BookAction.java
package com.biubiubiu.bookmgr.action;
import java.util.List;
/**
* 界面层
*/
import java.util.Scanner;
import com.biubiubiu.bookmgr.pojo.Book;
import com.biubiubiu.bookmgr.service.BookService;
import com.biubiubiu.bookmgr.util.Utils;
import com.biubiubiu.bookmgr.util.ObjectFactory;
public class BookAction {
BookService bookServiceImpl ;
public BookAction() {
bookServiceImpl = ObjectFactory.getInstance(Utils.B_S);
}
public void menu() {
System.out.println("1.显示所有图书");
System.out.println("2.添加图书");
System.out.println("3.修改图书");
System.out.println("4.删除图书");
System.out.println("0.退出系统");
Scanner sc = new Scanner(System.in);
System.out.print("请输入:>>");
try {
int n = sc.nextInt();
switch (n) {
case 1:
selectBook();
break;
case 2:
addBook();
break;
case 3:
updateBook();
break;
case 4:
delectBook();
break;
case 0:
if (exit()) {
return;
}
break;
default:
System.out.println("输入的序号有误,请重新输入!");
}
} catch (Exception e) {
System.out.println("请输入合法序号!");
}
menu();
}
/**
* 查询图书
*/
public void selectBook() {
List<Book> booksList = bookServiceImpl.selectBooks();
if(booksList.isEmpty()) {
System.out.println("暂时没有图书信息~");
}else {
for (int i=0; i<booksList.size(); i++) {
System.out.println((i+1) + "、 " + booksList.get(i).getBookno() + "," + booksList.get(i).getBookname() + "," + Utils.dateToStr(booksList.get(i).getBooktime()));
}
System.out.println();
}
}
/**
* 添加图书
*/
public void addBook() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入图书编号:");
String bId = sc.nextLine();
System.out.println("请输入图书名称:");
String bName = sc.nextLine();
System.out.println("请输入图书创建日期(yyyy-MM-dd HH:mm:ss):");
String bDate = sc.nextLine();
Book book = new Book(bId, bName, Utils.strToDate(bDate));
String message= bookServiceImpl.addBook(book);
System.out.println(message);
}
/**
* 更新图书
*/
public void updateBook() {
selectBook();
Scanner sc = new Scanner(System.in);
System.out.println("请选择你要更新的图书序号:");
int id = sc.nextInt();
if(id<=0 || id>bookServiceImpl.selectBooks().size()) {
System.out.println("你要更新的图书不存在~");
}else {
int index = id - 1;
System.out.println("请选择要修改的类型:a.图书编号 b.图书名称 c.图书日期");
String type = sc.next();
System.out.println("请输入修改后的数据:");
Scanner scd = new Scanner(System.in);
String value = scd.nextLine();
String message = bookServiceImpl.updateBook(index, type, value);
System.out.println(message);
}
}
/**
* 删除图书
*/
public void delectBook() {
selectBook();
Scanner sc = new Scanner(System.in);
System.out.println("请选择你要删除的图书序号:");
int id = sc.nextInt();
if(id<=0 || id>bookServiceImpl.selectBooks().size()) {
System.out.println("你要删除的图书不存在~");
}else {
int index = id - 1;
String message = bookServiceImpl.deleteBook(index);
System.out.println(message);
}
}
/**
* 退出
* @return
*/
public boolean exit() {
System.out.println("确定退出吗?(y/任意键返回)");
Scanner sc = new Scanner(System.in);
String s = sc.next();
if (s.equalsIgnoreCase("y")) {
System.out.println("是否保存更新到XML文件并退出?(y/任意键返回)");
String string = sc.next();
if(string.equalsIgnoreCase("y")) {
Utils.saveXML(false);
System.out.println("已更新XML,成功退出~");
return true;
}else {
System.out.println("程序退出成功!");
return false;
}
} else {
System.out.println("取消了退出,程序继续运行~");
return false;
}
}
}
Start.java
package com.biubiubiu.bookmgr.start;
/**
* 程序测试
* @author 11142
*
*/
import com.biubiubiu.bookmgr.action.BookAction;
public class Start {
public static void main(String[] args) {
BookAction bookAction = new BookAction();
bookAction.menu();
}
}
ObjectFactory.java
package com.biubiubiu.bookmgr.util;
import java.util.HashMap;
import java.util.Map;
public class ObjectFactory {
private static Map<String, Object> mapobject = new HashMap<String, Object>();
public static <E> E getInstance(String key) {
E obj = null;
try {
if(mapobject.containsKey(key)) {
obj = (E) mapobject.get(key);
}else {
obj = (E)Class.forName(Utils.getValue(key)).newInstance();
mapobject.put(key, obj);
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return obj;
}
}
Utils.java
package com.biubiubiu.bookmgr.util;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* 工具类
*/
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import com.biubiubiu.bookmgr.dao.daoimpl.BookDAOImpl;
import com.biubiubiu.bookmgr.pojo.Book;
public class Utils {
public final static String B_D = "bookDAOImpl";
public final static String B_S = "bookServiceImpl";
static Map<String, String> map = new HashMap<String, String>();
static {
map.put("bookDAOImpl", "com.biubiubiu.bookmgr.dao.daoimpl.BookDAOImpl");
map.put("bookServiceImpl", "com.biubiubiu.bookmgr.service.serviceimpl.BookServiceImpl");
}
public static String getValue(String key) {
return map.get(key);
}
/**
* 把字符串转为日期
* @param str
* @return
*/
public static Date strToDate(String str) {
Date date = null;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = df.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 日期转为字符串
* @param date
* @return
*/
public static String dateToStr(Date date) {
String str = "";
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
str = ft.format(date);
return str;
}
public static Document document = null;
/**
* 解析XML,读取数据操作
* @return
*/
public static String readXML() {
StringBuilder sb = new StringBuilder();
try {
InputStream is = BookDAOImpl.class.getClassLoader().getResourceAsStream("book.xml");
SAXReader saxReader = new SAXReader();
document = saxReader.read(is);
Element root = document.getRootElement();
List<Element> sonEles = root.elements();
for (Element element : sonEles) {
String str1 = element.attributeValue("bookno")+",";
List<Element> bronds = element.elements();
for (int i=0; i<bronds.size(); i++) {
if(i==bronds.size()-1) {
str1 += bronds.get(i).getText() +"\n";
}else {
str1 += bronds.get(i).getText() +",";
}
}
sb.append(str1);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return sb.toString();
}
/**
* 写入数据
* @param bookno
* @param bookname
* @param booktime
*/
public static void writeXML(Book book) {
Element root = document.getRootElement();
Element id = root.addElement("book");
id.addAttribute("bookno", book.getBookno());
Element name = id.addElement("bookname");
name.addText(book.getBookname());
Element time = id.addElement("booktime");
time.addText(Utils.dateToStr(book.getBooktime()));
}
/**
* 修改删除操作
*/
public static void updateXML() {
Element root = document.getRootElement();
List<Element> elements = root.elements();
for (Element element : elements) {
element.getParent().remove(element);
}
for(int i=0; i<BookDAOImpl.books.size(); i++) {
writeXML(BookDAOImpl.books.get(i));;
}
// saveXML(false);
}
/**
* 保存XML文件
* @param isAppend
*/
public static void saveXML(boolean isAppend) {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = null;
try {
String path = "E:\\JAVA\\JAVA_WorkSpace\\KGC_Senior\\Senior1028\\src\\main\\resources\\book.xml";
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(path, isAppend)),format);
writer.write(document);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 图书列表-->
<books>
<book bookno="s004">
<bookname>MySQL数据库</bookname>
<booktime>2015-10-03 12:00:00</booktime>
</book>
<book bookno="s003">
<bookname>Spring从入门到精通</bookname>
<booktime>2015-11-03 12:00:00</booktime>
</book>
<book bookno="s002">
<bookname>java案例大全</bookname>
<booktime>2015-12-01 12:00:00</booktime>
</book>
<book bookno="s001">
<bookname>java从入门到精通</bookname>
<booktime>2015-12-03 12:00:00</booktime>
</book>
</books>