“Java任务:缓存购物车”的版本间的差异
(创建页面,内容为“==Java任务:缓存购物车== 当退出程序的时候,需要实现缓存购物车中数据,完成效果如图6-5所示。 文件:java6-4.png 图6-5…”) |
|||
第29行: | 第29行: | ||
3.创建1参构造函数,负责给成员变量赋值。 | 3.创建1参构造函数,负责给成员变量赋值。 | ||
− | public CartCacheManager(User user) { | + | <nowiki>public CartCacheManager(User user) { |
super(); | super(); | ||
this.user = user; | this.user = user; | ||
} | } | ||
− | + | </nowiki> | |
4.定义并实现存储购物车数据的方法saveCart。 | 4.定义并实现存储购物车数据的方法saveCart。 | ||
第49行: | 第49行: | ||
*(3)如果购物车中存在商品,遍历购物车,把购物车商品信息转换成字符串,格式为:商品编号+,+数量。 | *(3)如果购物车中存在商品,遍历购物车,把购物车商品信息转换成字符串,格式为:商品编号+,+数量。 | ||
− | StringBuffer cache=new StringBuffer(""); | + | <nowiki>StringBuffer cache=new StringBuffer(""); |
for(Entry<Book, Integer> e:cart.entrySet()) { | for(Entry<Book, Integer> e:cart.entrySet()) { | ||
cache.append(e.getKey().getBid()).append(","); | cache.append(e.getKey().getBid()).append(","); | ||
cache.append(e.getValue()).append("\n"); | cache.append(e.getValue()).append("\n"); | ||
− | } | + | }</nowiki> |
*(4)则把商品数据保存到缓存文件中,缓存文件路径:项目工程/cache文件夹,缓存文件命名:用户编号 + _cache.txt(例如:u01_cache.txt)。 | *(4)则把商品数据保存到缓存文件中,缓存文件路径:项目工程/cache文件夹,缓存文件命名:用户编号 + _cache.txt(例如:u01_cache.txt)。 | ||
− | String filename=user.getId()+"_cache.txt"; | + | <nowiki>String filename=user.getId()+"_cache.txt"; |
try(PrintWriter pw=new PrintWriter(new File(FILE_PATH+filename))){ | try(PrintWriter pw=new PrintWriter(new File(FILE_PATH+filename))){ | ||
System.out.println(cache.toString()); | System.out.println(cache.toString()); | ||
第62行: | 第62行: | ||
e1.printStackTrace(); | e1.printStackTrace(); | ||
return; | return; | ||
− | } | + | } </nowiki> |
===第三步:创建测试类TestWriter,测试方法saveCart=== | ===第三步:创建测试类TestWriter,测试方法saveCart=== | ||
具体代码如下: | 具体代码如下: | ||
− | public class TestWriter { | + | <nowiki>public class TestWriter { |
public static void main(String[] args) { | public static void main(String[] args) { | ||
BookDataSet booksData=new BookDataSet();//创建商品库 | BookDataSet booksData=new BookDataSet();//创建商品库 | ||
第86行: | 第86行: | ||
cm.saveCart(); | cm.saveCart(); | ||
} | } | ||
− | } | + | }</nowiki> |
===第四步:定义并实现读取用户购物车文件的方法loadCacheToCart | ===第四步:定义并实现读取用户购物车文件的方法loadCacheToCart | ||
第94行: | 第94行: | ||
(1)购物车缓存文件不存在,则不做任何处理。 | (1)购物车缓存文件不存在,则不做任何处理。 | ||
− | + | <nowiki> | |
String fileName=user.getId()+"_cache.txt"; | String fileName=user.getId()+"_cache.txt"; | ||
File file= new File(FILE_PATH+fileName); | File file= new File(FILE_PATH+fileName); | ||
if(!file.exists()) | if(!file.exists()) | ||
return; | return; | ||
− | + | </nowiki> | |
(2)如购物车缓存文件存在,则利用字符流对象读取缓存文件。 | (2)如购物车缓存文件存在,则利用字符流对象读取缓存文件。 | ||
− | // 获取用户购物车对象 | + | <nowiki>// 获取用户购物车对象 |
ShoppingCart cart = user.getCart(); | ShoppingCart cart = user.getCart(); | ||
// 读取文件并把文件中,相应商品添加到购物车中 | // 读取文件并把文件中,相应商品添加到购物车中 | ||
第116行: | 第116行: | ||
} catch (IOException e) { | } catch (IOException e) { | ||
e.printStackTrace(); | e.printStackTrace(); | ||
− | } | + | }</nowiki> |
===第五步:在main方法中验证测试loadCacheToCart=== | ===第五步:在main方法中验证测试loadCacheToCart=== | ||
− | public class TestReader { | + | <nowiki>public class TestReader { |
public static void main(String[] args) { | public static void main(String[] args) { | ||
BookDataSet booksData=new BookDataSet();//创建商品库 | BookDataSet booksData=new BookDataSet();//创建商品库 | ||
第129行: | 第129行: | ||
System.out.println(u01.getCart()); | System.out.println(u01.getCart()); | ||
} | } | ||
− | } | + | }</nowiki> |
==程序代码== | ==程序代码== | ||
− | public class CartCacheManager { | + | <nowiki>public class CartCacheManager { |
// 缓存文件存放目录 | // 缓存文件存放目录 | ||
public static String FILE_PATH = "cache/"; | public static String FILE_PATH = "cache/"; | ||
第189行: | 第189行: | ||
} | } | ||
} | } | ||
− | } | + | }</nowiki> |
2018年4月5日 (四) 07:26的版本
目录
Java任务:缓存购物车
当退出程序的时候,需要实现缓存购物车中数据,完成效果如图6-5所示。
图6-5 缓存购物车中数据的文件
当登录后需要读取缓存文件数据,此时若在控制台显示,完成效果如图6-6所示。
图6-6 读取缓存购物车数据的文件并输出显示
任务实现
实施思路
第一步:启动Eclipse,导入工程Project0601
在项目根目录下创建文件夹cache。
第二步:创建购物车数据缓存操作类
创建购物车数据缓存操作类:CartCacheManager。
1.定义常量用于缓存文件的路径。
public static String FILE_PATH = "cache/";
2.定义User成员变量,用于获取购物车对象。
private User user=null;//当前登陆用户
3.创建1参构造函数,负责给成员变量赋值。
public CartCacheManager(User user) { super(); this.user = user; } 4.定义并实现存储购物车数据的方法saveCart。
public void saveCart() {}
具体步骤如下:
- (1)获取用户购物车对象:
ShoppingCart cart=user.getCart();
- (2)如果购物车中没有商品,则不存储商品信息:
if(cart.size()==0)
return;
- (3)如果购物车中存在商品,遍历购物车,把购物车商品信息转换成字符串,格式为:商品编号+,+数量。
StringBuffer cache=new StringBuffer(""); for(Entry<Book, Integer> e:cart.entrySet()) { cache.append(e.getKey().getBid()).append(","); cache.append(e.getValue()).append("\n"); }
- (4)则把商品数据保存到缓存文件中,缓存文件路径:项目工程/cache文件夹,缓存文件命名:用户编号 + _cache.txt(例如:u01_cache.txt)。
String filename=user.getId()+"_cache.txt"; try(PrintWriter pw=new PrintWriter(new File(FILE_PATH+filename))){ System.out.println(cache.toString()); pw.println(cache.toString()); } catch (FileNotFoundException e1) { e1.printStackTrace(); return; }
第三步:创建测试类TestWriter,测试方法saveCart
具体代码如下:
public class TestWriter { public static void main(String[] args) { BookDataSet booksData=new BookDataSet();//创建商品库 //创建用户,设置用户的ID为01 User u01=new User(); u01.setId("01"); //用户购买商品 ShoppingCart cart= u01.getCart(); Book book1=booksData.getBooks()[0]; try { cart.buy(book1, 10); } catch (CartException e) { System.out.println(e.getMessage()); return; } //存储购物车中数据 CartCacheManager cm=new CartCacheManager(u01); cm.saveCart(); } }
===第四步:定义并实现读取用户购物车文件的方法loadCacheToCart
public void loadCacheToCart(BookDataSet books) {}
具体步骤如下:
(1)购物车缓存文件不存在,则不做任何处理。 String fileName=user.getId()+"_cache.txt"; File file= new File(FILE_PATH+fileName); if(!file.exists()) return; (2)如购物车缓存文件存在,则利用字符流对象读取缓存文件。
// 获取用户购物车对象 ShoppingCart cart = user.getCart(); // 读取文件并把文件中,相应商品添加到购物车中 try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); String[] datas = line.split(","); cart.put(books.getBookById(datas[0]), Integer.parseInt(datas[1])); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
第五步:在main方法中验证测试loadCacheToCart
public class TestReader { public static void main(String[] args) { BookDataSet booksData=new BookDataSet();//创建商品库 //创建用户,设置用户的ID为01 User u01=new User(); u01.setId("01"); CartCacheManager cm=new CartCacheManager(u01); cm.loadCacheToCart(booksData); System.out.println(u01.getCart()); } }
程序代码
public class CartCacheManager { // 缓存文件存放目录 public static String FILE_PATH = "cache/"; private User user = null;// 当前登陆用户 public CartCacheManager(User user) { super(); this.user = user; } /** * 退出时,缓存购物车中数据 */ public void saveCart() { ShoppingCart cart = user.getCart(); // 购物车内没有数据时,不做任何处理 if (cart.size() == 0) return; // 把购物车中的数据,转换成字符串,格式为:商品编号+,+数量 StringBuffer cache = new StringBuffer(); for (Entry<Book, Integer> e : cart.entrySet()) { cache.append(e.getKey().getBid()).append(","); cache.append(e.getValue()).append("\n"); } // 把数据存储到文件中:用户编号_cache.txt String filename = user.getId() + "_cache.txt"; try (PrintWriter pw = new PrintWriter(new File(FILE_PATH + filename))) { pw.print(cache.toString()); } catch (FileNotFoundException e1) { e1.printStackTrace(); return; } } public void loadCacheToCart(BookDataSet books) { // 读取缓存中的文件 String fileName = user.getId() + "_cache.txt"; File file = new File(FILE_PATH + fileName); if (!file.exists()) return; // 获取用户购物车对象 ShoppingCart cart = user.getCart(); // 读取文件并把文件中,相应商品添加到购物车中 try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); String[] datas = line.split(","); //添加缓存文件中的对象到购物车 cart.put(books.getBookById(datas[0]), Integer.parseInt(datas[1])); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }