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

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

 public class PropertiesTest {
public static void main(String[] args) throws IOException {
getAppCount();
} public static void getAppCount() throws IOException{ //将配置文件封装成File对象。
File confile = new File("count.properties"); if(!confile.exists()){
confile.createNewFile();
} FileInputStream fis = new FileInputStream(confile); Properties prop = new Properties(); prop.load(fis); //从集合中通过键获取次数。
String value = prop.getProperty("time"); //定义计数器。记录获取到的次数。
int count =0;
if(value!=null){
count = Integer.parseInt(value);
if(count>=5){
// System.out.println("使用次数已到,请注册,给钱!");
// return;
throw new RuntimeException("使用次数已到,请注册,给钱!");
}
}
count++; //将改变后的次数重新存储到集合中。
prop.setProperty("time", count+""); FileOutputStream fos = new FileOutputStream(confile); prop.store(fos, ""); fos.close();
fis.close();
} }

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

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class Test { public static void main(String[] args) throws IOException {
File dir = new File("F:\\SogouWP"); FilenameFilter filter = new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".webp");
}
}; List<File> list = new ArrayList<File>(); getFiles(dir,filter,list); File destFile = new File(dir,"webp.txt");
write2File(list,destFile);
}
//对指定目录中的内容进行深度遍历,并按照指定的过滤器,进行过滤,将过滤后的内容存储到指定的容器List中
public static void getFiles(File dir,FilenameFilter filter,List<File> list){
//要先进行健壮性的判断,这里先省略 File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory()){
//递归了
getFiles(file,filter,list);
}else{
//对遍历到的文件进行过滤器的过滤,将符合条件File对象,存储进List集合中
if(filter.accept(dir, file.getName())){
list.add(file);
}
} }
}
public static void write2File(List<File> list, File destFile)throws IOException{
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(destFile)); for(File file:list){
bufw.write(file.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
} finally{
if(bufw != null){
try {
bufw.close();
} catch (IOException e) {
throw new RuntimeException("关闭失败");
}
}
}
} }

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. 支付宝(alipay)即时到账收款接口开发中的那些事儿

    不会做,看看也可以会,要做好就还是需要多学习 国庆回来就一直没状态,看完<银河护卫队>,印象最深的竟然是只有两句台词的呆萌groot,昨天才休息一天,大耍大吃,今天还是把昨天的知识学习一下 ...

  2. 使用GitHub搭建个人博客

    博客已经从博客园慢慢搬到GitHub  上,可能在博客园上显示不是很规整,可以移步到另外的一个上面看 Blog 两边博客同时更新. 欢迎各位star 和 follower 搭建过程 在搭建博客时候也踩 ...

  3. Jquery的ID选择器

    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></scri ...

  4. 微信小程序支付最容易犯的坑notify_url(支付回调)

    最近做了微信小程序支付,支付成功之后发现notify_url回调地址竟然没有访问. 检查了无数次代码,下单结果里面的回调地址看了又看,都没有错啊. 把回调地址复制出来到浏览器上面,外网也是可以访问的啊 ...

  5. [android] androidPN开源项目介绍

    打开androidPN项目,会看到server和client两份代码 server部分 找到server的代码,开启服务,双击 bin/run.bat ,服务启动后监听127.0.0.1:7070端口 ...

  6. Java中变量之局部变量、本类成员变量、父类成员变量的访问方法

    变量:局部变量.本类成员变量.父类成员变量 如何访问:如果变量名相同,则采用就近原则,哪个变量离所要调用的访问最近,那就么就输出,优先顺序为:局部变量 > 本类成员变量 > 父类成员变量 ...

  7. (三)Sass和Compass--制作精灵图片

    6.1 精灵的工作原理 // 将各种图片合并到一张图片里面,并在不同的状态下改变背景图片的位置; 6.2 精灵的重要性 // 压缩图片的内存; // 减少HTTP请求 6.2.3 Compass处理精 ...

  8. MySQL安装的挫折之路

    由于对MySQL卸载的不干净,mysql 的MySQL Connector Net/xxx无法卸载,后期重装无法成功.所以只能采用zip 安装https://www.cnblogs.com/Micha ...

  9. 洛谷P4562 [JXOI2018]游戏(组合数学)

    题意 题目链接 Sol 这个题就比较休闲了. \(t(p)\)显然等于最后一个没有约数的数的位置,那么我们可以去枚举一下. 设没有约数的数的个数有\(cnt\)个 因此总的方案为\(\sum_{i=c ...

  10. git命令详解( 八)

    此为记录git的第八篇,前七篇为远程篇,工作中最常用的都在前七篇,因为要在远程分支上合作开发     在提交树上移动 撤销变更 在提交树上移动 在接触 Git 更高级功能之前,我们有必要先学习在你项目 ...