定义功能:获取一个应用程序 运行次数,如果超过5次,给出使用次数已到请注册的提示,并不要再运行程序

思路:
   1.定义计数器:每次程序启动都需要计数一次,并且是在原有的次数上进行计数。
   2.计数器就是一个变量,程序启动时候进行计数,计数器必须存在于内存中并进行运算,可以程序结束,计数器消失了,那么再次启动该程序,计数器又重新被初始化了
     而我们要多次启动同一个应用程序,使用的是同一个计数器,这就需要使计数器的声明周期变长,从内存存储到硬盘文件中。
   3.如何使用这个计数器呢?
     首先,程序启动时,应该先读取这个用于记录计数器信息的配置文件。获取上一次计数器次数,并进行试用次数的判断,其次对次数进行自增,并将自增后的次数重     新存储到配置文件中
   4.文件中的信息该如何进行存储并体现
     直接存储次数的值可以,但不明确该数据的含义,所以起名字就变得很重要了。
     这就有了名字和值的对应,所以可以使用键值对,可以映射关系map集合,但又要读取硬盘上的数据,所以map+io = properties

  1. public class PropertiesTest {
  2. public static void main(String[] args) throws IOException {
  3. getAppCount();
  4. }
  5.  
  6. public static void getAppCount() throws IOException{
  7.  
  8. //将配置文件封装成File对象。
  9. File confile = new File("count.properties");
  10.  
  11. if(!confile.exists()){
  12. confile.createNewFile();
  13. }
  14.  
  15. FileInputStream fis = new FileInputStream(confile);
  16.  
  17. Properties prop = new Properties();
  18.  
  19. prop.load(fis);
  20.  
  21. //从集合中通过键获取次数。
  22. String value = prop.getProperty("time");
  23.  
  24. //定义计数器。记录获取到的次数。
  25. int count =0;
  26. if(value!=null){
  27. count = Integer.parseInt(value);
  28. if(count>=5){
  29. // System.out.println("使用次数已到,请注册,给钱!");
  30. // return;
  31. throw new RuntimeException("使用次数已到,请注册,给钱!");
  32. }
  33. }
  34. count++;
  35.  
  36. //将改变后的次数重新存储到集合中。
  37. prop.setProperty("time", count+"");
  38.  
  39. FileOutputStream fos = new FileOutputStream(confile);
  40.  
  41. prop.store(fos, "");
  42.  
  43. fos.close();
  44. fis.close();
  45. }
  46.  
  47. }

获取指定目录下,指定扩展名的文件(包含子目录中的) 将这些文件的绝对路劲写入到一个文本文件中简单的说就是建立一个指定扩展名的文件的列表
 思路:
   1.必须进行深度遍历
   2.要在遍历的过程中进行过滤,将符合条件的内容都存储到容器中(也可以不存储到容器中,直接写入文件中,但是内容比较多,所以先用一个容器存储起来,之后想怎么操作就怎么操作)
   3.对容器中的内容进行遍历并将绝对路劲写入到文件中

  1. import java.io.BufferedWriter;
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.io.FilenameFilter;
  5. import java.io.IOException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. public class Test {
  10.  
  11. public static void main(String[] args) throws IOException {
  12. File dir = new File("F:\\SogouWP");
  13.  
  14. FilenameFilter filter = new FilenameFilter(){
  15. @Override
  16. public boolean accept(File dir, String name) {
  17. return name.endsWith(".webp");
  18. }
  19. };
  20.  
  21. List<File> list = new ArrayList<File>();
  22.  
  23. getFiles(dir,filter,list);
  24.  
  25. File destFile = new File(dir,"webp.txt");
  26. write2File(list,destFile);
  27. }
  28. //对指定目录中的内容进行深度遍历,并按照指定的过滤器,进行过滤,将过滤后的内容存储到指定的容器List中
  29. public static void getFiles(File dir,FilenameFilter filter,List<File> list){
  30. //要先进行健壮性的判断,这里先省略
  31.  
  32. File[] files = dir.listFiles();
  33. for(File file : files){
  34. if(file.isDirectory()){
  35. //递归了
  36. getFiles(file,filter,list);
  37. }else{
  38. //对遍历到的文件进行过滤器的过滤,将符合条件File对象,存储进List集合中
  39. if(filter.accept(dir, file.getName())){
  40. list.add(file);
  41. }
  42. }
  43.  
  44. }
  45. }
  46. public static void write2File(List<File> list, File destFile)throws IOException{
  47. BufferedWriter bufw = null;
  48. try {
  49. bufw = new BufferedWriter(new FileWriter(destFile));
  50.  
  51. for(File file:list){
  52. bufw.write(file.getAbsolutePath());
  53. bufw.newLine();
  54. bufw.flush();
  55. }
  56. } finally{
  57. if(bufw != null){
  58. try {
  59. bufw.close();
  60. } catch (IOException e) {
  61. throw new RuntimeException("关闭失败");
  62. }
  63. }
  64. }
  65. }
  66.  
  67. }

Properties集合_练习的更多相关文章

  1. Properties集合_修改配置信息

    集合中的数据来自于一个文件  注意:必须要保证该文件中的数据是键值对.  需要使用到读取流 使用load()方法读取已有文件中的数据,存储到Properties集合中 public class Pro ...

  2. 转换流 Properties集合 序列化 工具

    今日内容介绍1.转换流2.缓冲流3.Properties集合4.序列化流与反序列化流5.commons-IO============================================== ...

  3. Oracle学习总结_day05_集合_连接查询

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day05_集合_连接查询 集合操作符 UNION ( ...

  4. 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类

    ---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...

  5. Properties集合的练习

    1.更改文件中的数据,特定键的值: 需求:我有一个文本文件(user.txt),我知道数据是键值对形式的,但是不知道内容是什么. 请写一个程序判断是否有"lisi"这样的键存在,如 ...

  6. java基础知识回顾之java集合类-Properties集合

    /** java.lang.Object   |--java.util.Dictionary<K,V>      |--java.util.Hashtable<Object,Obje ...

  7. Properties集合

    Map |--Hashtable |--Properties Properties集合特点: 1.该集合中的键和值都是字符串类型 2.集合中的数据可以保存在IO流中或者从IO流中获取数据. 通常该集合 ...

  8. -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器

    集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别?                 A:长度区别                  ...

  9. IO流--与properties集合配合使用

    IO流--与properties集合配合使用: 注:生产上主要用于常量文件的配置,读取常量文件: 1:properties集合的放值与取值: /* * properties集合继承自hashTable ...

随机推荐

  1. Spring @Pathvariable

    先记录下@PathVariable的用法吧: @RequestMapping("/demo/{id}") @ResponseBody public User getUser(@Pa ...

  2. 前后端分离demo 旅馆管理系统

    模型设计   旅馆管理系统,主要涉及到登记入住,退房以及客房和客人信息管理:经过分析抽像出涉及到的实体以及各实体之间的关系:   可以看出整个业务以客房为中心,入住,退房,定价,收费都是以客房为基本单 ...

  3. 分布式计算框架Spark

    Apache Spark是一个开源分布式运算框架,最初是由加州大学柏克莱分校AMPLab所开发. Hadoop MapReduce的每一步完成必须将数据序列化写到分布式文件系统导致效率大幅降低.Spa ...

  4. 自动化运维(1)之二进制部署MySQL5.7

    二进制部署MySQL5.7 这个文档用于基础解释,后面通过ansible的自动化对MySQL单实例进行安装部署. 1.解压文件 # tar zxvf mysql-5.7.22-linux-glibc2 ...

  5. 多继承之MRO

    一,python2和python3的区别 在python2中存在两种类:一个叫经典类,在python2.2之前,一直用的是经典类,经典类如果在基类的根什么都不写,那么它就是根:还有一个叫新式类,在py ...

  6. Java学习笔记之——常用快捷键(eclipse)

    * Ctrl+C 复制 * Ctrl+V 粘贴 * Ctrl+A 全选 * Ctrl+S 保存 * Ctrl+Z 撤销 * Ctrl+Y 还原 * Ctrl+X 剪切 * Ctrl+F   查找 * ...

  7. 【原】通过BeanNameAutoProxyCreator改变臃肿代码

    前言: 最近接手了一个项目,大概过了下需求,然后打开项目准备开搞的时候发现一个问题,这个项目是提供rest服务的一个web项目,其中很多旧系统由于还没改成微服务,所以只能通过HttpClient发起调 ...

  8. 【mysql】service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误

    service MySQL start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [root@ctohome.com ~]# service ...

  9. eclipse使用struts2找不到action方法或找不到action的错误记录

    在确认web.xml已经配置, 配置好struts.xml , 代码没有报错, jar包没有问题, 服务器也没有问题, 代码逻辑没有问题, 关键字方法名action都没有写错, 可以运行旧的相同的代码 ...

  10. vue项目sql图片动态路径引用问题

    最近遇到一个vue动态图片路径的引用问题?明明路径是正确的但是却渲染不出图片!先看我慢慢说来!! 1.当我们把图片的路径放置在data(){return:{}}中的数组中的时候,然后通过v-for循环 ...