一个、锻炼

深度遍历目录

深度遍历非常自然而然想到递归,而递归就非常自然的想到事实上现的底层算法是栈

对指定文件夹下列出全部内容(包括子文件夹的内容)

PS:建议不要遍历C盘

import java.io.*;

public class Main
{
public static void main(String[] args) throws IOException { File dir = new File("D:\\ACM集训");
ListAllDemo(dir,0);
} public static void ListAllDemo(File dir,int level) throws IOException { System.out.println(GetSpace(level)+"文件夹 : "+dir.getAbsolutePath());
level++;//为了缩进
//获取指定文件夹下当前全部文件/文件对象
File[] files = dir.listFiles();
for(int i =0;i<files.length;i++){
if(files[i].isDirectory()){
ListAllDemo(files[i],level);
}
else{
System.out.println(GetSpace(level)+"文件 : "+files[i].getAbsolutePath());
}
}
} public static String GetSpace(int level) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
for(int i = 0;i<level;i++)
sb.append(" ");
return sb.toString();
}
}

删除文件夹

import java.io.*;

public class Main
{
public static void main(String[] args) throws IOException { File dir = new File("D:\\ACM集训1");
//dir.delete(dir);假设文件中有内容,是不能从根文件夹删除的,必须从里往外删
DeleteDemo(dir);
} public static void DeleteDemo(File dir) { File[] files = dir.listFiles();
for(File f: files){
if(f.isDirectory()){
DeleteDemo(f);
}
else{
System.out.println(f.getAbsolutePath()+" : "+f.delete());//删除文件
}
}
System.out.println(dir.getAbsolutePath()+":"+dir.delete());//删除文件夹
} }

二、Properties集合

API文档解释:Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中载入。

属性列表中每一个键及其相应值都是一个字符串。

特点:

该集合中的键和值都是字符串类型

集合中的数据能够保存到流中,或从流中获取

通常该集合用于操作以键值对的形式存在的配置文件

import java.io.*;
import java.util.Properties;
import java.util.Set; public class Main
{
public static void main(String[] args) throws IOException { PropertiesDemo();
} public static void PropertiesDemo() {
//存
Properties pro = new Properties();
pro.setProperty("a", "1");
pro.setProperty("b", "2");
pro.setProperty("c", "3");
pro.setProperty("d", "1"); //改动
pro.setProperty("c", "6");
//取
Set<String> name = pro.stringPropertyNames();
//stringPropertyNames():返回此属性列表中的键集。当中该键及其相应值是字符串,
//假设在主属性列表中未找到同名的键,则还包含默认属性列表中不同的键。
for(String s : name){
String value = pro.getProperty(s);
//getProperty():用指定的键在此属性列表中搜索属性。
System.out.println(s+" : "+value);
}
}
}

三、Properties集合和流对象相结合

1.list方法:

将属性列表输出到指定的输出流。

此方法对调试非常实用。

public static void PropertiesDemo() {

		Properties pro = new Properties();
pro.setProperty("a", "1");
pro.setProperty("b", "2");
pro.setProperty("c", "3");
pro.setProperty("d", "1"); pro.list(System.out);
}

调用此方法随时都能够看到Properties集合存储的是什么

和 System.getProperties(),差点儿相同



2.store方法

这方法就体现了Properties集合特点中的持久化,将集合中的信息储存起来

public void store(OutputStream out, String comments)throws IOException

以适合使用 load(InputStream) 方法载入到 Properties 表中的格式。将此
Properties 表中的属性列表(键和元素对)写入输出流。

out - 输出流。

comments - 属性列表的描写叙述。

而save方法已经过时了。

public static void PropertiesDemo() throws IOException {

		Properties pro = new Properties();
pro.setProperty("a", "1");
pro.setProperty("b", "2");
pro.setProperty("c", "3");
pro.setProperty("d", "1"); //将Properties集合中的信息持久化的储存到文件里,须要关联输出流 FileOutputStream fos = new FileOutputStream("tep.txt");
//集合数据存储到文件里。store
pro.store(fos, "name and age");//这种方法不建议是使用中文信息
}

3.load方法

load(InputStream inStream) 输入流中读取属性列表(键和元素对)。

public static void PropertiesDemo() throws IOException {

		//集合中的数据来自文件,而不是我们存放的
Properties pro = new Properties();//注意必须保证文件里的数据是键值对 FileInputStream fis = new FileInputStream("tep.txt"); //使用load方法
pro.load(fis);
pro.list(System.out);
}

其原理

	public static void Myload() throws IOException {

		Properties pro = new Properties();
BufferedReader br = new BufferedReader(new FileReader("tep.txt"));
String str = null;
while((str = br.readLine())!=null){
if(str.startsWith("#"))continue;//由于文件里有些配置信息不是含“=”的
String[] arr = str.split("=");
//System.out.println(arr[0]+":"+arr[1]);
pro.setProperty(arr[0], arr[1]);
}
pro.list(System.out);
br.close(); }

4.改动已有的配置文件里的信息

1.读取这个文件

2.将文字中的键值信息存储到集合中

3.通过集合改动信息

4.在通过流将改动后的信息存储到文件里

public static void PropertiesDemo() throws IOException{

		File file = new File("tep.txt");
if(!file.isFile()){
file.createNewFile();
}
FileReader fr = new FileReader("tep.txt");
//FileWriter fw = new FileWriter(file);假设放在这。就会新建一个文件覆盖file。最后文件存的c=3
Properties pro = new Properties();
pro.load(fr);
//pro.list(System.out);
pro.setProperty("c", "3"); //一定要改完后才关联输出流对象,不要在上面就关联
FileWriter fw = new FileWriter(file);//流能够直接操作File对象
pro.store(fw, "after change");
}

四、练习

获取一个应用程序的使用次数,超过3次,给出使用次数已到请注冊的信息,并不要再执行程序的信息

分析:

此需求。须要一个计数器,每次程序启动计数器进内存。次数+1,退出程序,计数器关闭。存储到文件。

由于信心要明白。应该有名字和次数。->键值对->Map->Map+IO -> Properties

public static void PropertiesDemo() throws IOException{

		File countFile = new File("conutFile.properties");//键值对的配置信息(java)
if(!countFile.isFile())
countFile.createNewFile();
FileInputStream fis = new FileInputStream(countFile);
Properties pro = new Properties();
pro.load(fis); //从集合中通过键获取使用次数 String value = pro.getProperty("time");
int count = 0;//定义计数器
if(value!=null){
count = Integer.parseInt(value);//转换成int
if(count>=3){
throw new RuntimeException("使用次数已到。请注冊!");
}
}
count++;
//将改变后的数据又一次存储
pro.setProperty("time", count+"");//改动 FileOutputStream fos = new FileOutputStream(countFile);//关联输出流 pro.store(fos, "time is");//存储到文件
fos.close();
fis.close();
}

在开发的时候就能够将这段代码封装成一个对象,在执行时,创建就可以





版权声明:本文博客原创文章,博客,未经同意,不得转载。

JAVA学习课第五十三届 — IO流程(七)File打靶 &amp; Properties设置的更多相关文章

  1. JAVA学习课第五 — IO流程(九)文件分割器合成器

    文件分割器 private static final int SIZE = 1024 *1024; public static void splitFile(File file) throws IOE ...

  2. JAVA学习课第五十八届 — GUI

    GUI Graghical User Interface(图形用户接口) java为GUI提供的对象都存在java.awt和java.swing包中 Java的GUI做的的确干只是C++等.不打算浪费 ...

  3. Java学习的第五十三天

    1.例9.5引用静态数据成员 public class Cjava { public static void main(String[]args) { Box b[] = {new Box(12,15 ...

  4. 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周

    java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...

  5. JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题

    一.多线程下的单例设计模式 利用双重推断的形式解决懒汉式的安全问题和效率问题 //饿汉式 /*class Single { private static final Single t = new Si ...

  6. Java学习笔记(五)

    作业1:将指定目录下的所有文件显示到列表框(JList)组件中. 代码如下: import java.awt.; import java.awt.event.; import javax.swing. ...

  7. Java学习笔记(五)——google java编程风格指南(中)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  8. 201521123103 《java学习笔记》 第十三周学习总结

    一.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 二.书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.e ...

  9. Java学习之路(十二):IO流<二>

    字符流 字符流是可以直接读写字符的IO流 使用字符流从文件中读取字符的时候,需要先读取到字节数据,让后在转换为字符 使用字符流向文件中写入字符时,需要把字符转为字节在写入文件 Reader和Write ...

随机推荐

  1. Cocos2d-x3.0游戏实例《不要救我》第一章——前言

    我们可以学习? 这是一个非常easy游戏.但更多的东西用(对于初学者).至少,对于它的一个例子,有点多. 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www.benm ...

  2. js 性能优化整理之 高频优化

    mousemove 拖拽操作 var count = 0; elem.onmousemove = function(){ count++; // 当计数器为偶数的时候不执行mousemove if( ...

  3. swift学习笔记(七)自己主动引用计数

    与Object-c一样,swift使用自己主动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自己主动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例 ...

  4. Vivado的helloword计划(一个):硬件project部分

    硬件平台:ZedBoard 软件平台:vivado2013.3 本演示样例通过综合.实现,生成比特流,发送到SDK实现. 启动vivado而且创建一个项目 依据提示操作一步步创建新项目的时候记得选择R ...

  5. 24L01/SI24R1调试笔记

    1.SPI MSB优先,8Bit寄存器地址与内容: 2.寄存器结构与之前使用的LT8900不同,分为R.W寄存器与特殊功能寄存器: 3.特别注意:在TX.RX.RT中断或者轮询后置1,必须写1清零与清 ...

  6. hdu 2067 兔子板

    兔子板 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. Install shipyard

    2台机器,192.168.1.153,192.168.1.154 安装Shipyard 1. 154作为集群主节点,在154机器上执行命令 curl -sSL https://shipyard-pro ...

  8. CSV文件格式分析器执行:从字符串Split至FSM

    本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee/article/details/38309147 本文分为5小节,基本上就是我刚接触C ...

  9. Scrum总结

    Scrum总结一个轻量级的软件开发方法 Scrum是一个敏捷开发框架,是一个增量迭代的开发过程..在这个框架整个开发周期由若干个小的跌代周期,每个小的的跌代周期称为一个Sprint,每个Sprint的 ...

  10. web架构设计经验分享(转)

    本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查 ...