JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习
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的小练习的更多相关文章
- JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习
JAVA之旅(十九)--ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习 关于数据结构,所讲的知识 ...
- Java从零开始学二十九(大数操作(BigIntger、BigDecimal)
一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中 ...
- Java学习笔记二十九:一个Java面向对象的小练习
一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...
- Java基础(二十九)Java IO(6)对象序列化(Object Serialization)
参考之前整理过的Java序列化与反序列化:https://www.cnblogs.com/BigJunOba/p/9127414.html 使用对象输入输出流可以实现对象序列化与反序列化,可以直接存取 ...
- java 面向对象(二十九):异常(二)异常的处理
1.java异常处理的抓抛模型过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象. * 并将此对象抛出. * 一旦抛出对象以后,其后的代 ...
- Java开发学习(二十九)----Maven依赖传递、可选依赖、排除依赖解析
现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependency>标签来进行jar包的引入即可. <depende ...
- 《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
1.简介 有些测试场景或者事件,Selenium根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某 ...
- JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口
JAVA之旅(十二)--Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一. ...
- Bootstrap入门(二十九)JS插件6:弹出框
Bootstrap入门(二十九)JS插件6:弹出框 加入小覆盖的内容,像在iPad上,用于存放非主要信息 弹出框是依赖于工具提示插件的,那它也和工具提示是一样的,是需要初始化才能够使用的 首先我们引入 ...
随机推荐
- Gradle学习之构建java与web项目
一.使用Gradle的java插件构建Java项目 1)Gradle插件包含了若干个接口定义和已有的任务项,语法结构:apply plugin:'插件名' ,此处我们定义插件 apply plugin ...
- python2.7入门---条件语句
前段时间呢,把MongoDB的基础内容了解的差不多了.接下来,就开始学习python2.7的基础内容喽.接着前面的知识点来学习.首先,来看一下条件语句.Python条件语句是通过一条或多条语句 ...
- sqlserver 截取字符串(转)
SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要 ...
- 深入理解null的原理
--null的原理 --oracle一直将null和空字符串''<长度为0>同等对待<如'' is null是true,''=null为false,如果声明a varchar2:=' ...
- Java为什么要配置环境变量及如何配置环境变量
在没有配置环境变量之前,用cmd执行Java文件,需要指明Java的可执行文件,否则无法运行. 配置环境是为了在不用切换可执行文件目录下,方便Java程序的执行和控制. 那么环境变量就是让系统根据环境 ...
- 关于Linux下软件包aptitude的相关操作
aptitude+回车 - 进入aptitude操作界面,可以对预览查看各种软件包 aptitude show package_name - 列出与XXX相关的软件包信息,但是并不能看到该软件包所安装 ...
- Java日志-Log4j2
Log4j2参考资料 Log4j2 官方配置文档 1. Log4j2基本概念: Logger 在代码中产生日志信息的.比如logger.info("some log message" ...
- cassandra 3.x官方文档(6)---内部原理之存储引擎
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- proc文件系统探索 之 以数字命名的目录
在proc根目录下,以数字命名的目录表示当前一个运行的进程,目录名即为进程的pid.其内的目录和文件给出了一些关于该进程的信息. niutao@niutao-desktop:/proc/6584$ l ...
- 20160219.CCPP体系详解(0029天)
程序片段(01):ReplaceAll.c 内容概要:ReplaceAll #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #incl ...