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

简介: JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习 我们继续学习File 一.文件递归 我们可以来实现一个文件管理器,简单的,但是在此之前,我们先来做点小案例 package com.

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,我们本篇就先到这里,我们下篇在聊

原文地址http://www.bieryun.com/2844.html

相关文章
|
8天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
9天前
|
Java 编译器 Maven
Java“class file contains wrong class”解决
当Java程序运行时出现“class file contains wrong class”错误,通常是因为类文件与预期的类名不匹配。解决方法包括:1. 确保类名和文件名一致;2. 清理并重新编译项目;3. 检查包声明是否正确。
|
9天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
21 4
|
12天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
12天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
14天前
|
缓存 Java 程序员
Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
在开发过程中,FreeMarker 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。通过一些配置后,可以让它们免重启自动更新。
22 0
|
12天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
91 38
|
10天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
4天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
5天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
23 4