io流新闻管理系统实例(简单型)

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

io流新闻管理系统实例(简单型)的相关文章

java IO流文件的读写具体实例(转载)

引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能找到,但自己总感觉不是很踏实,所以今天就抽空看了看java IO流的一些操作,感觉还是很有收获的,顺便总结些资料,方便以后进一步的学习... IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流

java.io 字节流与字符流及简单实例

java io是java中非常基础的知识点,对于通信和不涉及到数据库的项目java io应该是要经常使用.java io分为字节流和字符流,分清字节流和字符流的异同是掌握java io的起点. 字节流,最小单位是字节,通信协议中的X-MODEM和Y-MODEM协议传输单位就是字节流.java io中与字节流相关的主要类有:InputStream,OutputStream,FileInputStream,FileOutputStream.与字符流有关的主要类有:Writer,Reader,File

IO流操作中创建的流对象为什么一定close?-java开发

IO流操作中创建的流对象为什么一定close? 这里我们需要注意了,当我们在程序中创建一个IO流对象的时候,同时系统也会创建一个叫做流的东西,在这种情况下,计算机内存中实际产生了两个事物,一个是java程序中类的实例对象,一个是系统本身产生的某种资源,而java垃圾回收器只能管理程序中类的实例对象,没办法去管理系统产生的资源,所以程序需要调用close方法,去通知系统释放其自身产生的资源.

File流与IO流 看这一篇就够了

主要内容 File类 递归 IO流 字节流 字符流 异常处理 Properties 缓冲流 转换流 序列化流 打印流 学习目标 [ ] 能够说出File对象的创建方式 [ ] 能够说出File类获取名称的方法名称 [ ] 能够说出File类获取绝对路径的方法名称 [ ] 能够说出File类获取文件大小的方法名称 [ ] 能够说出File类判断是否是文件的方法名称 [ ] 能够说出File类判断是否是文件夹的方法名称 [ ] 能够辨别相对路径和绝对路径 [ ] 能够遍历文件夹 [ ] 能够解释递归

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

Java IO流详解

初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是java io 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializa

IO流(二):字节流及其缓冲流

一.IO概述 1.分类 1) 流向: 输入流 读取数据 输出流 写出数据 2)  数据类型: 字节流 字节输入流 读取数据 InputStream 字节输出流 写出数据 OutputStream 字符流  字符输入流 读取数据 Reader 字符输出流 写出数据 Writer 注意: 一般我们在探讨IO流的时候,如果没有明确说明按哪种分类来说,默认情况下是按照数据类型来分的. 每种基类的子类都是以父类名作为后缀名. XxxOutputStream XxxInputStream XxxReader

IO流(四):其他流

一.操作基本数据类型的流 (一)构造方法 1.数据输入流:DataInputStream(InputStream in) 2.数据输出流:DataOutputStream(OutputStream out) (二)方法 1.DataOutputStream: writeByte(10); writeShort(100); writeInt(1000); writeLong(10000); writeFloat(12.34F); writeDouble(12.56); writeChar('a')

IO流4

IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节. 处理对象不同:字节流能处理所有类型的数据(如图片.avi等),而字符流只能处理字符类型的数据. 结论:只要是处理纯文本数据,就优先考虑使用