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上,用于存放非主要信息 弹出框是依赖于工具提示插件的,那它也和工具提示是一样的,是需要初始化才能够使用的 首先我们引入 ...
随机推荐
- 两个文件比较之comm命令
comm命令可用于两个文件之间的比较.它有很多不错的选项可用来调整输出,以便我们执行交集.求差(difference)以及差集操作. 交集:打印出两个文件所共有的行. 求差:打印出指定文件所包含的 ...
- WPF 实现换肤功能
将所有控件的基本样式汇集到一个资源字典中,构成界面的基本样式文件,然后进行不同颜色皮肤的定制. 即在新的皮肤资源字典文件中引入基本样式文件,然后使用资源继承,并且只设置控件的颜色属性等,形成一个皮肤文 ...
- OVF文件考究
一.什么是OVF文件 开源虚拟化格式OVF(不同于小写的ovf)文件是一种开源的文件规范,它描述了一个开源.安全.有效.可拓展的便携式虚拟打包以及软件分布格式,它一般有几个部分组成,分别是o ...
- 给div添加2个class
<div class='center nocontent'> 类名用空格分开 在优先级一样的情况下就近原则 优先级# 100 .10 <span>这种标签是1 所以的相加 ...
- Eclipse插件安装4种方法
第一种:直接复制法 假设Eclipse的安装目录在C:\eclipse,解压下载的eclipse 插件或者安装eclipse 插件到指定目录AA(如:c:\AA)文件夹,打开AA 文件夹,在AA文件夹 ...
- 3.2 2-dim Vector Initialization
声明3行4列的数组 const int m = 3, n = 4; vector<vector<int> > A(m); // 3 rows for(int i = 0; i ...
- Spring boot 整合 Mybatis + Thymeleaf开发web(二)
上一章我把整个后台的搭建和逻辑给写出来了,也贴的相应的代码,这章节就来看看怎么使用Thymeleaf模板引擎吧,Spring Boot默认推荐Thymeleaf模板,之前是用jsp来作为视图层的渲染, ...
- Node.js 定时器
稳定性: 5 - 锁定 所有的定时器函数都是全局的.不需要通过 require() 就可以访问. setTimeout(callback, delay[, arg][, ...]) delay 毫秒之 ...
- PHP 是什么
PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言. PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本 ...
- JDBC访问数据库的一些小技巧
一. 连接 1.使用try with resources关闭JDBC资源 示例代码如下: public List<User> getUser(int userId) { try (Conn ...