1、新闻集合的使用+文件流的应用
2、文件流序列化与反序列化对象的使用
一、创建新闻类
1 package com.news.entity; 2 3 import java.io.Serializable; 4 import java.util.Date; 5 6 /** 7 * 新闻实体类 8 * @author Direct 9 * 10 */ 11 public class NewsInfo implements Serializable{ 12 /** 13 * 14 */ 15 private static final long serialVersionUID = 1L; 16 private Integer newsId; 17 private String newsTitle; 18 private String newsContent; 19 private Date newsDate; 20 /** 21 * @return the newsId 22 */ 23 public Integer getNewsId() { 24 return newsId; 25 } 26 /** 27 * @param newsId the newsId to set 28 */ 29 public void setNewsId(Integer newsId) { 30 this.newsId = newsId; 31 } 32 /** 33 * @return the newsTitle 34 */ 35 public String getNewsTitle() { 36 return newsTitle; 37 } 38 /** 39 * @param newsTitle the newsTitle to set 40 */ 41 public void setNewsTitle(String newsTitle) { 42 this.newsTitle = newsTitle; 43 } 44 /** 45 * @return the newsContent 46 */ 47 public String getNewsContent() { 48 return newsContent; 49 } 50 /** 51 * @param newsContent the newsContent to set 52 */ 53 public void setNewsContent(String newsContent) { 54 this.newsContent = newsContent; 55 } 56 /** 57 * @return the newsDate 58 */ 59 public Date getNewsDate() { 60 return newsDate; 61 } 62 /** 63 * @param newsDate the newsDate to set 64 */ 65 public void setNewsDate(Date newsDate) { 66 this.newsDate = newsDate; 67 } 68 69 70 }
二、创建新闻测试类(里面主要包含增加新闻、删除新闻、查询新闻)
1 package com.news.test; 2 3 import java.text.SimpleDateFormat; 4 import java.util.ArrayList; 5 import java.util.Date; 6 import java.util.List; 7 import java.util.Scanner; 8 9 import com.news.entity.NewsInfo; 10 11 public class TestNews { 12 13 // 创建存储新闻信息的集合对象 14 private List<NewsInfo> newsList = new ArrayList<NewsInfo>(); 15 // 创建TestNews对象 16 17 18 /** 19 * 显示所有的新闻信息的方法 20 */ 21 public void showNews() { 22 // 创建时间格式化对象 23 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 24 // 判断是否存在新闻信息 25 if(newsList.size()==0) { 26 System.out.println("暂无新闻信息可查"); 27 } else { 28 System.out.println("编号\t\t标题\t\t\t内容\t\t\t发布时间"); 29 for(NewsInfo news : newsList) { 30 System.out.println(news.getNewsId()+"\t\t"+news.getNewsTitle()+"\t\t\t"+news.getNewsContent()+"\t\t\t"+sdf.format(news.getNewsDate())); 31 } 32 } 33 } 34 35 /** 36 * 添加新闻信息 37 * @param news 传人需要添加的新闻实体对象 38 */ 39 public void addNews(NewsInfo news) { 40 // 获取新闻集合对象的大小 41 int size = newsList.size(); 42 // 把新的新闻对象添加到新闻集合中 43 newsList.add(news); 44 // 判断是否添加成功 45 if(newsList.size()>size) { 46 System.out.println("添加成功"); 47 } else { 48 System.out.println("添加失败"); 49 } 50 } 51 52 /** 53 * 根据新闻编号删除新闻信息 54 * @param newsId 55 */ 56 public boolean deleteNews(int newsId) { 57 boolean flag = false; 58 // 获取新闻集合对象的大小 59 int size = newsList.size(); 60 // 判断删除的Id是否在遍历的集合对象中 61 for(NewsInfo news : newsList) { 62 if(news.getNewsId() == newsId) { 63 newsList.remove(news); 64 flag = true; 65 break; 66 } 67 } 68 69 /*if(size>newsList.size()) { 70 System.out.println("删除成功"); 71 } else { 72 System.out.println("新闻编号不存在,删除失败"); 73 }*/ 74 if(flag) { 75 System.out.println("删除成功"); 76 } else { 77 System.out.println("新闻编号不存在,删除失败"); 78 } 79 80 return flag; 81 } 82 /** 83 * 根据新闻编号查询新闻详细信息 84 * @param args 85 */ 86 public void selectNews(int newsId){ 87 boolean flag = false; 88 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 89 int size = newsList.size(); 90 // 判断删除的Id是否在遍历的集合对象中 91 for(NewsInfo news : newsList) { 92 if(news.getNewsId() == newsId) { 93 System.out.println("标题为:"+news.getNewsTitle()+"\t"+"内容为:"+news.getNewsContent()+"\t"+"时间为:"+sdf.format(news.getNewsDate())); 94 flag = true; 95 break; 96 } 97 if(flag) { 98 System.out.println("查询成功"); 99 } else { 100 System.out.println("编号不存在,查询失败"); 101 } 102 } 103 } 104 public static void main(String[] args) { 105 TestNews tn = new TestNews(); 106 System.out.println("<<<<<<<<<<<<<<<<<<<<<欢迎使用ArrayList新闻管理系统>>>>>>>>>>>>>>>>>>>>>"); 107 while(true) { 108 System.out.println("1、查询所有新闻"); 109 System.out.println("2、添加新闻"); 110 System.out.println("3、删除新闻"); 111 System.out.println("4、退出系统"); 112 System.out.println("5、根据新闻编号查询新闻详情"); 113 System.out.println("请选择功能(1,2,3,4,5):"); 114 // java.util.Scanner 115 Scanner sc = new Scanner(System.in); 116 117 Integer selector = null; 118 while(true) { 119 try { 120 // 接收控制台输入 121 String op = sc.nextLine(); 122 selector = Integer.parseInt(op); 123 if(selector<1 || selector>5) { 124 System.out.println("不存在该功能代号,请重新输入:"); 125 } else { 126 break; 127 } 128 129 } catch (NumberFormatException e) { 130 System.out.println("请输入一个数字:"); 131 } 132 } 133 134 switch (selector) { 135 case 1: 136 // 显示所有新闻信息 137 tn.showNews(); 138 break; 139 case 2: 140 // 创建一个新闻对象 141 NewsInfo news = new NewsInfo(); 142 System.out.println("请输入新闻编号:"); 143 news.setNewsId(Integer.parseInt(sc.nextLine())); 144 System.out.println("请输入新闻标题:"); 145 news.setNewsTitle(sc.nextLine()); 146 System.out.println("请输入新闻内容:"); 147 news.setNewsContent(sc.nextLine()); 148 news.setNewsDate(new Date()); 149 // 调用添加新闻的方法 150 tn.addNews(news); 151 break; 152 case 3: 153 while(true) { 154 System.out.println("请输入要删除的编号:"); 155 boolean flag = tn.deleteNews(sc.nextInt()); 156 if(flag) { 157 break; 158 } 159 } 160 break; 161 case 4: 162 System.out.println("欢迎再次使用该系统"); 163 // 退出系统 164 System.exit(0); 165 166 break; 167 case 5: 168 System.out.println("请输入你要查询的编号:"); 169 Integer number1 = sc.nextInt(); 170 tn.selectNews(number1); 171 break; 172 default: 173 break; 174 } 175 } 176 177 } 178 }
三、在第二步的基础上进行补充数据存储功能、使用io流完成功能(主要代码Static静态代码块,定义装载程序的方法,序列化方法,反序列化方法(外加自定义异常处理和常量类))
1 package com.news.test; 2 3 import java.io.EOFException; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 import java.io.ObjectInputStream; 10 import java.io.ObjectOutputStream; 11 import java.text.SimpleDateFormat; 12 import java.util.ArrayList; 13 import java.util.Date; 14 import java.util.List; 15 import java.util.Scanner; 16 17 import com.news.BusinessException; 18 import com.news.constants.Constant; 19 import com.news.entity.NewsInfo; 20 21 @SuppressWarnings("all") 22 public class TestNews implements Constant { 23 24 // 创建存储新闻信息的集合对象 25 private static List<NewsInfo> newsList = null; 26 // 创建一个文件对象句柄 27 private static File file = null; 28 29 // 只会在类实例的时候执行一次 30 static { 31 installPro(); 32 33 // 在程序第一次运行的时候才序列化文件 34 try { 35 if (new FileInputStream(file).available() == 0) { 36 setNewsInfos(); 37 } 38 } catch (FileNotFoundException e) { 39 e.printStackTrace(); 40 } catch (IOException e) { 41 e.printStackTrace(); 42 } 43 } 44 45 /** 46 * 定义装载程序的方法 47 */ 48 49 /** 50 * 51 */ 52 private static void installPro() { 53 // 创建TestNews集合对象 54 newsList = new ArrayList<NewsInfo>(); 55 56 String filePath = FILEPATH; 57 String dirString = filePath.substring(0, filePath.lastIndexOf("/")); 58 // 通过dir创建一个文件目录对象 59 File dir = new File(dirString); 60 // 判断目录是否存在 61 if (!dir.exists()) { 62 dir.mkdirs(); 63 } 64 // 创建一个文件对象 65 file = new File(filePath); 66 67 try { 68 if (!file.exists()) { 69 file.createNewFile(); 70 } 71 } catch (Exception e) { 72 throw new BusinessException(NOT_FILE); 73 } 74 75 } 76 77 /** 78 * 显示所有的新闻信息的方法 79 */ 80 public void showNews() { 81 // 创建时间格式化对象 82 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 83 newsList = getNewsInfos(); 84 // 判断是否存在新闻信息 85 if (newsList.size() == 0) { 86 System.out.println("暂无新闻信息可查"); 87 } else { 88 System.out.println("编号\t\t标题\t\t\t内容\t\t\t发布时间"); 89 for (NewsInfo news : newsList) { 90 System.out.println(news.getNewsId() + "\t\t" 91 + news.getNewsTitle() + "\t\t\t" 92 + news.getNewsContent() + "\t\t\t" 93 + sdf.format(news.getNewsDate())); 94 } 95 } 96 } 97 98 /** 99 * 添加新闻信息 100 * 101 * @param news 102 * 传人需要添加的新闻实体对象 103 */ 104 public void addNews(NewsInfo news) { 105 newsList = getNewsInfos(); 106 // 获取新闻集合对象的大小 107 int size = newsList.size(); 108 // 把新的新闻对象添加到新闻集合中 109 newsList.add(news); 110 // 判断是否添加成功 111 if (newsList.size() > size) { 112 System.out.println("添加成功"); 113 setNewsInfos(); 114 } else { 115 System.out.println("添加失败"); 116 } 117 } 118 119 /** 120 * 根据新闻编号删除新闻信息 121 * 122 * @param newsId 123 */ 124 public boolean deleteNews(int newsId) { 125 boolean flag = false; 126 newsList = getNewsInfos(); 127 // 获取新闻集合对象的大小 128 int size = newsList.size(); 129 // 判断删除的Id是否在遍历的集合对象中 130 for (NewsInfo news : newsList) { 131 if (news.getNewsId() == newsId) { 132 newsList.remove(news); 133 flag = true; 134 break; 135 } 136 } 137 138 /* 139 * if(size>newsList.size()) { System.out.println("删除成功"); } else { 140 * System.out.println("新闻编号不存在,删除失败"); } 141 */ 142 if (flag) { 143 System.out.println("删除成功"); 144 setNewsInfos(); 145 146 } else { 147 System.out.println("新闻编号不存在,删除失败"); 148 } 149 150 return flag; 151 } 152 153 /** 154 * 定义反序列化文件的方法 155 * 156 * @param args 157 */ 158 private static List<NewsInfo> getNewsInfos() { 159 List<NewsInfo> news = null; 160 ObjectInputStream out = null; 161 try { 162 out = new ObjectInputStream(new FileInputStream(file)); 163 news = (List<NewsInfo>) out.readObject(); 164 } catch (FileNotFoundException e) { 165 e.printStackTrace(); 166 } catch (Exception e) { 167 e.printStackTrace(); 168 } finally { 169 try { 170 if (null != out) { 171 out.close(); 172 } 173 } catch (IOException e) { 174 e.printStackTrace(); 175 } 176 } 177 178 return news; 179 } 180 181 /** 182 * 定义序列化文件的方法 183 * 184 * @param args 185 */ 186 private static void setNewsInfos() { 187 // 创建一个对象输出流对象 188 ObjectOutputStream out = null; 189 try { 190 // 创建一个对象输出流对象 191 out = new ObjectOutputStream(new FileOutputStream(file)); 192 out.writeObject(newsList); 193 } catch (FileNotFoundException e) { 194 e.printStackTrace(); 195 } catch (IOException e) { 196 e.printStackTrace(); 197 } finally { 198 try { 199 if (null != out) { 200 out.close(); 201 } 202 } catch (IOException e) { 203 e.printStackTrace(); 204 } 205 } 206 } 207 208 public static void main(String[] args) { 209 TestNews tn = new TestNews(); 210 System.out 211 .println("<<<<<<<<<<<<<<<<<<<<<欢迎使用ArrayList新闻管理系统>>>>>>>>>>>>>>>>>>>>>"); 212 while (true) { 213 System.out.println("1、查询所有新闻"); 214 System.out.println("2、添加新闻"); 215 System.out.println("3、删除新闻"); 216 System.out.println("4、退出系统"); 217 System.out.println("5、根据新闻编号查询新闻详情"); 218 System.out.println("请选择功能(1,2,3,4):"); 219 // java.util.Scanner 220 Scanner sc = new Scanner(System.in); 221 222 Integer selector = null; 223 while (true) { 224 try { 225 // 接收控制台输入 226 String op = sc.nextLine(); 227 selector = Integer.parseInt(op); 228 if (selector < 1 || selector > 4) { 229 System.out.println("不存在该功能代号,请重新输入:"); 230 } else { 231 break; 232 } 233 234 } catch (NumberFormatException e) { 235 System.out.println("请输入一个数字:"); 236 } 237 } 238 239 switch (selector) { 240 case 1: 241 // 显示所有新闻信息 242 tn.showNews(); 243 break; 244 case 2: 245 // 创建一个新闻对象 246 NewsInfo news = new NewsInfo(); 247 System.out.println("请输入新闻编号:"); 248 news.setNewsId(Integer.parseInt(sc.nextLine())); 249 System.out.println("请输入新闻标题:"); 250 news.setNewsTitle(sc.nextLine()); 251 System.out.println("请输入新闻内容:"); 252 news.setNewsContent(sc.nextLine()); 253 news.setNewsDate(new Date()); 254 // 调用添加新闻的方法 255 tn.addNews(news); 256 break; 257 case 3: 258 while (true) { 259 System.out.println("请输入要删除的编号:"); 260 boolean flag = tn.deleteNews(sc.nextInt()); 261 if (flag) { 262 break; 263 } 264 } 265 break; 266 case 4: 267 System.out.println("欢迎再次使用该系统"); 268 // 退出系统 269 System.exit(0); 270 271 break; 272 273 default: 274 break; 275 } 276 } 277 278 } 279 }
三、第三步里面的(异常类)代码
1 /** 2 * 3 */ 4 package com.news; 5 6 /** 7 * @author Direct 8 * 9 */ 10 public class BusinessException extends RuntimeException { 11 12 private static final long serialVersionUID = 1L; 13 14 public BusinessException(String message) { 15 super(message); 16 } 17 18 public String getMessage() { 19 return super.getMessage(); 20 } 21 22 23 }
三、第三步里面的常量类代码
1 package com.news.constants; 2 3 public interface Constant { 4 // 定义文件存储的路径字符串常量 5 String FILEPATH = "E:/mynews/news.data"; 6 String NOT_FILE = "未找到操作的文件"; 7 }
第四、总结 :以上总共分为4个包中的4个类
时间: 2024-10-12 08:04:38