# 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));
}
}
}
~~~
> 一览无余,打印的结果
![这里写图片描述](http://img.blog.csdn.net/20160713204719522)
## 四.读取配置文件
> 我们配置文件如果已经存在的话,我们就直接去读取了
* 我们来演示一下如何将流中的数据存储到集合中,想要通过键值对的形式保存起来
> 说白了就是读取本地的一个文件,然后通过键值对保存起来,我们用代码来实现
~~~
/**
* 思路
* 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();
}
}
~~~
> 这样我们输出的就是
![这里写图片描述](http://img.blog.csdn.net/20160713210040814)
## 五.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();
}
}
}
~~~
> 我们得到的结果
![这里写图片描述](http://img.blog.csdn.net/20160713213807449)
> OK,我们本篇就先到这里,我们下篇在聊
## 有兴趣的可以加群:555974449
版权声明:本文为博主原创文章,博客地址:http://blog.csdn.net/qq_26787115,未经博主允许不得转载。
- 0-发现
- AndroidInterview-Q-A
- Android能让你少走弯路的干货整理
- LearningNotes
- temp
- temp11
- 部分地址
- 0-待办任务
- 待补充列表
- 0-未分类
- AndroidView事件分发与滑动冲突处理
- Spannable
- 事件分发机制详解
- 1-Java
- 1-Java-01基础
- 未归档
- 你应该知道的JDK知识
- 集合框架
- 1-Java-04合集
- Java之旅0
- Java之旅
- JAVA之旅01
- JAVA之旅02
- JAVA之旅03
- JAVA之旅04
- JAVA之旅05
- JAVA之旅06
- JAVA之旅07
- JAVA之旅08
- JAVA之旅09
- java之旅1
- JAVA之旅10
- JAVA之旅11
- JAVA之旅12
- JAVA之旅13
- JAVA之旅14
- JAVA之旅15
- JAVA之旅16
- JAVA之旅17
- JAVA之旅18
- JAVA之旅19
- java之旅2
- JAVA之旅20
- JAVA之旅21
- JAVA之旅22
- JAVA之旅23
- JAVA之旅24
- JAVA之旅25
- JAVA之旅26
- JAVA之旅27
- JAVA之旅28
- JAVA之旅29
- java之旅3
- JAVA之旅30
- JAVA之旅31
- JAVA之旅32
- JAVA之旅33
- JAVA之旅34
- JAVA之旅35
- 1-Java-05辨析
- HashMapArrayMap
- Java8新特性
- Java8接口默认方法
- 图解HashMap(1)
- 图解HashMap(2)
- 2-Android
- 2-Android-1-基础
- View绘制流程
- 事件分发
- AndroidView的事件分发机制和滑动冲突解决
- 自定义View基础
- 1-安卓自定义View基础-坐标系
- 2-安卓自定义View基础-角度弧度
- 3-安卓自定义View基础-颜色
- 自定义View进阶
- 1-安卓自定义View进阶-分类和流程
- 10-安卓自定义View进阶-Matrix详解
- 11-安卓自定义View进阶-MatrixCamera
- 12-安卓自定义View进阶-事件分发机制原理
- 13-安卓自定义View进阶-事件分发机制详解
- 14-安卓自定义View进阶-MotionEvent详解
- 15-安卓自定义View进阶-特殊形状控件事件处理方案
- 16-安卓自定义View进阶-多点触控详解
- 17-安卓自定义View进阶-手势检测GestureDetector
- 2-安卓自定义View进阶-绘制基本图形
- 3-安卓自定义View进阶-画布操作
- 4-安卓自定义View进阶-图片文字
- 5-安卓自定义View进阶-Path基本操作
- 6-安卓自定义View进阶-贝塞尔曲线
- 7-安卓自定义View进阶-Path完结篇伪
- 8-安卓自定义View进阶-Path玩出花样PathMeasure
- 9-安卓自定义View进阶-Matrix原理
- 通用类介绍
- Application
- 2-Android-2-使用
- 2-Android-02控件
- ViewGroup
- ConstraintLayout
- CoordinatorLayout
- 2-Android-03三方使用
- Dagger2
- Dagger2图文完全教程
- Dagger2最清晰的使用教程
- Dagger2让你爱不释手-终结篇
- Dagger2让你爱不释手-重点概念讲解、融合篇
- dagger2让你爱不释手:基础依赖注入框架篇
- 阅读笔记
- Glide
- Google推荐的图片加载库Glide:最新版使用指南(含新特性)
- rxjava
- 这可能是最好的RxJava2.x入门教程完结版
- 这可能是最好的RxJava2.x入门教程(一)
- 这可能是最好的RxJava2.x入门教程(三)
- 这可能是最好的RxJava2.x入门教程(二)
- 这可能是最好的RxJava2.x入门教程(五)
- 这可能是最好的RxJava2.x入门教程(四)
- 2-Android-3-优化
- 优化概况
- 各种优化
- Android端秒开优化
- apk大小优化
- 内存分析
- 混淆
- 2-Android-4-工具
- adb命令
- 一键分析Android的BugReport
- 版本控制
- git
- git章节简述
- 2-Android-5-源码
- HandlerThread 源码分析
- IntentService的使用和源码分析
- 2-Android-9-辨析
- LRU算法
- 什么是Bitmap
- 常见图片压缩方式
- 3-Kotlin
- Kotlin使用笔记1-草稿
- Kotlin使用笔记2
- kotlin特性草稿
- Kotlin草稿-Delegation
- Kotlin草稿-Field
- Kotlin草稿-object
- 4-JavaScript
- 5-Python
- 6-Other
- Git
- Gradle
- Android中ProGuard配置和总结
- gradle使用笔记
- Nexus私服搭建
- 编译提速最佳实践
- 7-设计模式与架构
- 组件化
- 组件化探索(OKR)
- 1-参考列表
- 2-1-组件化概述
- 2-2-gradle配置
- 2-3-代码编写
- 2-4-常见问题
- 2-9-值得一读
- 8-数据结构与算法
- 0临时文件
- 汉诺塔
- 8-数据-1数据结构
- HashMap
- HashMap、Hashtable、HashSet 和 ConcurrentHashMap 的比较
- 迟到一年HashMap解读
- 8-数据-2算法
- 1个就够了
- Java常用排序算法(必须掌握的8大排序算法)
- 常用排序算法总结(性能+代码)
- 必须知道的八大种排序算法(java实现)
- 9-职业
- 阅读
- 书单
- 面试
- 面试-01-java
- Java面试题全集骆昊(上)
- Java面试题全集骆昊(下)
- Java面试题全集骆昊(中)
- 面试-02-android
- 40道Android面试题
- 面试-03-开源源码
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
- 面试-07-设计模式
- 面试-08-算法
- 面试-09-其他
- SUMMARY
- 版权说明
- temp111