定义功能:获取一个应用程序 运行次数,如果超过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 //从集合中通过键获取次数。 23 String value = prop.getProperty("time"); 24 25 //定义计数器。记录获取到的次数。 26 int count =0; 27 if(value!=null){ 28 count = Integer.parseInt(value); 29 if(count>=5){ 30 // System.out.println("使用次数已到,请注册,给钱!"); 31 // return; 32 throw new RuntimeException("使用次数已到,请注册,给钱!"); 33 } 34 } 35 count++; 36 37 //将改变后的次数重新存储到集合中。 38 prop.setProperty("time", count+""); 39 40 FileOutputStream fos = new FileOutputStream(confile); 41 42 prop.store(fos, ""); 43 44 fos.close(); 45 fis.close(); 46 } 47 48 }
获取指定目录下,指定扩展名的文件(包含子目录中的) 将这些文件的绝对路劲写入到一个文本文件中简单的说就是建立一个指定扩展名的文件的列表
思路:
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("关闭失败"); } } } } }