JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习


我们继续学习File

一.文件递归

我们可以来实现一个文件管理器,简单的,但是在此之前,我们先来做点小案例

package com.lgl.hellojava;

import java.io.File;

public class HelloJJAVA {
    public static void main(String[] args) {

        File dir = new File("E:\\AndroidDelepoer");

        showDir(dir);
    }

    private static void showDir(File dir) {
        System.out.println("目录:" + dir);
        File[] fils = dir.listFiles();
        for (int i = 0; i < fils.length; i++) {
            if (fils[i].isDirectory()) {
                showDir(fils[i]);
            } else {
                // 列出根目录
                System.out.println("files" + fils);
            }
        }

    }
}

因为目录中海油目录,只要使用同一个列出目录功能的函数完成即可,在列出过程中出现的还是目录的话,还可以再此的功能,,也就是函数自身调用自身,这种表现形式,或者手法称为递归

    //递归
    private static void method(){
        method();
    }

你可以看

private static void toBin(int num) {
        while (num > 0) {
            toBin(num / 2);
             System.out.println(num % 2);
            // num = num / 2;
        }
    }

二.File结束练习

File讲到这里也是差不多的讲完了,感觉还不错,有很多知识点,我们就用一个小练习来结束这个知识点吧!

  • 将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,建立一个java文件列表的文件
package com.lgl.hellojava;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class HelloJJAVA {
    public static void main(String[] args) {

        /**
         * 思路:
         * 1.对指定的目录进行递归
         * 2.获取递归过程所有的java文化的路径
         * 3.将这些路径存储到集合中
         * 4.将集合中的数据写入到一个文件中
         */

        File file = new File("f:\\");
        java.util.List<File> list = new ArrayList<File>();
        fileToList(file, list);
//      System.out.println(list.size());

        File name = new File(file,"HelloJAVA.java");
        writeToFile(list, name.toString());

    }

    public static void fileToList(File dir, java.util.List<File> list) {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                fileToList(file, list);
            } else {
                // 判断java文件
                if (file.getName().endsWith(".java")) {
                    list.add(file);
                }
            }
        }
    }

    // 写入文件
    public static void writeToFile(java.util.List<File> list,
            String javaFileList) {
        BufferedWriter bufw = null;
        try {
            bufw = new BufferedWriter(new FileWriter(javaFileList));
            for (File f : list) {
                String path = f.getAbsolutePath();
                bufw.write(path);
                bufw.newLine();
                bufw.flush();
            }
        } catch (IOException e) {
            try {
                throw e;
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }
}

三.Properties

Properties我们之前就早有接触了,他是hastable的子类,也就是说它具备map集合的特点,而且他里面存储的键值对都是字符串

  • 该对象的特点,可以用于键值对形式的配置文件

这也是一个工具类,我们可以来学习学习,先来演示一下使用情况吧,我们从set,get说起

package com.lgl.hellojava;

import java.util.Properties;
import java.util.Set;

public class HelloJJAVA {
    public static void main(String[] args) {

        SetAndGet();
    }

    // 设置和获取元素
    private static void SetAndGet() {
        Properties prop = new Properties();
        prop.setProperty("张三", "20");

        System.out.println(prop);

        String property = prop.getProperty("张三");
        System.out.println(property);

        Set<String> stringPropertyNames = prop.stringPropertyNames();
        for (String s : stringPropertyNames) {
            // 打印姓名
            System.out.println(s);
            // 打印值
            System.out.println(prop.getProperty(s));
        }
    }

}

一览无余,打印的结果

四.读取配置文件

我们配置文件如果已经存在的话,我们就直接去读取了

  • 我们来演示一下如何将流中的数据存储到集合中,想要通过键值对的形式保存起来

说白了就是读取本地的一个文件,然后通过键值对保存起来,我们用代码来实现

/**
     * 思路
     * 1.用一个流和info.txt文件关联
     * 2.读取遗憾数据,将该行数据进行去切割
     * 等号左边的作为键,右边的就是值
     */
    private static void ReadTxt(){
        try {
            BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));
            String line  = null;
            Properties properties = new Properties();
            while((line = bufr.readLine()) != null){
                System.out.println(line);
                String [] arr = line.split("=");
                System.out.println(arr[0]+"...."+arr[1]);

                //存
                properties.setProperty(arr[0], arr[1]);
            }
            bufr.close();

            System.out.println(properties);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

这样我们输出的就是

五.load

JDK1.6以后出现的load就取代了上面的哪个方式,我们一起来实现一下吧

private static void loadDemo(){
        try {
            FileInputStream fish = new FileInputStream("info.txt");
            Properties properties = new Properties();
            //将流中的数据加载进集合
            properties.load(fish);
            System.out.println(properties);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这样就可以达到效果了

六.Properties的小练习

  • 用于记录应用程序运行的次数,如果使用次数已到,那么给出注册提示,这个很容易想到的是计算器,可是这个程序中,是自增,而且随着程序而存在的,如果程序退出了,这个计数也同样的消失,下一次启动程序又是从0开始了,这样不是我们想要的

我们现在要做的是程序退出之后数据任然存在而且继续自增,所以我们要创建配置文件去记录使用次数

Ok,我们用键值对的形式保存

package com.lgl.hellojava;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class HelloJJAVA {
    public static void main(String[] args) {

        try {
            Properties properties = new Properties();
            File file = new File("count.ini");
            if (!file.exists()) {
                file.createNewFile();
            }
            FileInputStream fis = new FileInputStream(file);

            properties.load(fis);

            int count = 0;
            String value = properties.getProperty("time");

            if (value != null) {
                count = Integer.parseInt(value);
                if (count >= 5) {
                    System.out.println("你余额不足呀!");
                }
            }

            count++;
            properties.setProperty("time", count + "");

            FileOutputStream fos = new FileOutputStream(file);
            properties.store(fos, "");

            fos.close();
            fis.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

我们得到的结果

OK,我们本篇就先到这里,我们下篇在聊

有兴趣的可以加群:555974449

JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习的更多相关文章

  1. JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习

    JAVA之旅(十九)--ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习 关于数据结构,所讲的知识 ...

  2. Java从零开始学二十九(大数操作(BigIntger、BigDecimal)

    一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中 ...

  3. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

  4. Java基础(二十九)Java IO(6)对象序列化(Object Serialization)

    参考之前整理过的Java序列化与反序列化:https://www.cnblogs.com/BigJunOba/p/9127414.html 使用对象输入输出流可以实现对象序列化与反序列化,可以直接存取 ...

  5. java 面向对象(二十九):异常(二)异常的处理

    1.java异常处理的抓抛模型过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象. * 并将此对象抛出. * 一旦抛出对象以后,其后的代 ...

  6. Java开发学习(二十九)----Maven依赖传递、可选依赖、排除依赖解析

    现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependency>标签来进行jar包的引入即可. <depende ...

  7. 《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)

    1.简介 有些测试场景或者事件,Selenium根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某 ...

  8. JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口

    JAVA之旅(十二)--Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一. ...

  9. Bootstrap入门(二十九)JS插件6:弹出框

    Bootstrap入门(二十九)JS插件6:弹出框 加入小覆盖的内容,像在iPad上,用于存放非主要信息 弹出框是依赖于工具提示插件的,那它也和工具提示是一样的,是需要初始化才能够使用的 首先我们引入 ...

随机推荐

  1. 单纯形求解线性规划(BZOJ1061)

    推荐一篇论文:http://wenku.baidu.com/view/ce5784754a7302768f99391d 我们设xi为第i个志愿者的招募次数,以样例为例,则不难列出如下的线性规划方程: ...

  2. ssh远程登陆

    ssh远程登录命令简单实例   ssh命令用于远程登录上Linux主机.   常用格式:ssh [-l login_name] [-p port] [user@]hostname 更详细的可以用ssh ...

  3. 一起来Fit TDMA over WiFi(2)

    3 收发流程分析与改进 收发流程分析涉及到具体代码,属于SDK驱动内容,不能完全公开,仅供参考,本系列文档中涉及到具体功能或代码时,请在自己的驱动代码中查找. QCA驱动从9.5开始,将原来的htc的 ...

  4. 移动端开发,文字增加,字体自动放大(font boosting)

    问题缘由:做文章详情页的时候,文字多了一点字体就放大了,真的是奇了怪了. 问题重现 一段文字的时候 两段文字的时候 很明显,字体放大了很多. 疑点 meta标签缩放的问题 最近正好遇到处理retain ...

  5. jQuery ajax中使用serialize()方法提交表单数据示例

    <form id="form"> 输入账号 :<input id="name" type="text" name=&quo ...

  6. 如何在Linux上编译c++文件

    1. 打开Linux客户端,新建一个c++文件 2. 写如下代码,退出保存 3.对.cpp文件进行编译并输出结果.

  7. bootstrap插件fileinput.js 显示无法上传失败

    哪怕图片已经传到服务器上了 依然显示出错 // 处理完成后,必须返回一个json数据,否则会报错误 JSONObject jsonObject = new JSONObject(); jsonObje ...

  8. mongo索引

    索引自动创建和手工创建 db.stu.drop(); db.stu.insert({"name":"张三","sex":"男&qu ...

  9. 解读Raft(二 选举和日志复制)

    Leader election Raft采用心跳机制来触发Leader选举.Leader周期性的发送心跳(如果有正常的RPC的请求情况下可以不发心跳)包保持自己Leader的角色(避免集群中其他节点认 ...

  10. 【python标准库模块二】random模块学习

    random模块是用来生成随机数的模块 导入random模块 import random 生成一个0~1的随机数,浮点数 #随机生成一个0~1的随机数 print(random.random()) 生 ...