一、文件的遍历

1.需求:对指定目录进行所有的内容的列出(包含子目录的内容)—文件的深度遍历

思想:递归的思想,在递归的时候要记住递归的层次。

public class FileTest {

    public static void main(String[] args) {
File dir =new File("e:\\java\\JavaSE基础视频");
listAll(dir,);
}
private static void listAll(File dir,int level) {
level++; //level记录递归的层次
//获取指定目录下当前的所有文件夹或者文件对象
File[] files=dir.listFiles();
for (int i = ; i < files.length; i++) {
if(files[i].isDirectory()){
listAll(files[i],level); //递归
}
else
System.out.println(getSpace(level)+files[i].getName());
}
} private static String getSpace(int level) {
StringBuilder sb=new StringBuilder();
sb.append("|--");
for (int i = ; i < level; i++) {
sb.insert(,"| ");
}
return sb.toString();
} }

2.需求:删除指定文件夹中的所有内容

思想:必须从里面往外删除,进行深度遍历

public class RemoveDirTest {

    public static void main(String[] args) {
File dir=new File("e://111");
removeDir(dir); }
//这种删除是彻底删除,不经过回收站
private static void removeDir(File dir) {
File [] files=dir.listFiles();
for (File file : files) {
if(file.isDirectory()){
removeDir(file);
}else{
file.delete();
}
}
dir.delete();
}
}

二、Properties

* properties继承自hashtable
* 特点
* 1.该集合中的键和值都是字符串类型

* 2.集合中的数据可以保存在流中,或者从流获取

* 3.map+io=Properties

* 通常该集合用于操作以键值对形式存在的配置文件
* 配置信息:键值对 xml 数据库

    private static void propertiesDemo_5() throws IOException {
//读取这个文件
File file=new File("ifo.txt");
if(!file.exists()){
file.createNewFile();
}
FileReader fr=new FileReader("ifo.txt"); //创建集合存储配置信息
Properties prop =new Properties(); //将流中信息存储在集合中
prop.load(fr); //添加属性
prop.setProperty("zhaoliu","52"); FileWriter fw =new FileWriter(file);
//持久化
prop.store(fw, "comment");
//在控制台打印
prop.list(System.out); // 方法:public void list(PrintStream out)
fw.close();
fr.close();
}

例一:

定义功能:获取一个应用程序运行的次数,如果超过五次,如果超过五次给出使用次数已到请注册的提示。并不要运行程序。

思路
* 1.应该有计数器
* 每次程序启动都需要计数一次,并且是在原有的次数上进行计数
* 2.计数器就是一个变量。计数器不许在内存并进行运算
* 而我们需要多次启动同一个应用程序,使用的是同一个计数器
* 这就需要计数器的生命周期变长,从内存存储到硬盘文件中
* 3.首先,程序启动时,应该先访问这个用于记录计数器的信息的配置文件
* 获取上一次计数器次数。并进行使用此时的判断
* 其次,对次数进行自增,并自增后的次数重新存储到配置文件中
* 4.文件中的信息该如何进行存储并体现
* 直接存储次数可以,但是不明确该数据的含义。所以起名字变得很总要
* 这就有了名字和值的对应,所以可以使用键值对
* 可是映射关系map集合搞定,又要读取硬盘上的数据,所有map+io=Properties

public class PropertiesTest {

    public static void main(String[] args) throws IOException {
//将配置文件封装成File对象
File config=new File("count.properties");
if(!config.exists()){
config.createNewFile();
}
FileInputStream fis=new FileInputStream(config);
Properties prop=new Properties();
prop.load(fis); //从集合中通过键获取次数
String value =prop.getProperty("time");
//定义计数器。记录获取到的次数
int count=0;
if(value!=null){
count=Integer.parseInt(value);
if(count>=6){
throw new RuntimeException("使用次数已到,请注册,给钱!");
}
}
count++;
//将改变后的次数重新存储到集合中
prop.setProperty("time", String.valueOf(count));
FileOutputStream fos=new FileOutputStream(config);
prop.store(fos,"count");
fos.close();
fis.close();
}
}

例二:

需求:获取指定目录下,指定扩展名的文件(包含子目录中的),这些文件的绝对路径写入到一个文本文件中。

思路
* 1.必须进行深度遍历
* 2.要在遍历的过程中进行过滤。将符合条件的内容都存储到容器中
* 3.对容器中的内容进行遍历并将绝对路径写入到文件中

public class Test {

    public static void main(String[] args) throws IOException {
File dir=new File("E:\\JAVA\\JAVA练习");
FilenameFilter filter =new FilenameFilter(){ @Override
public boolean accept(File dir, String name) { return name.endsWith(".java");
} };
List<File> list =new ArrayList<File>();
getFiles(dir,filter,list);
File destFile =new File("javalist.txt");
writeToFile(list,destFile); }
public static void getFiles(File dir,FilenameFilter filter,List<File> list){
File[] files=dir.listFiles();
for (File file : files) {
if(file.isDirectory()){
getFiles(file,filter,list);//递归
}
else
{
//对遍历到的文件进行过滤器的过滤
//将符合条件File对象存储到List集合中
if(filter.accept(dir,file.getName())){
list.add(file);
} }
}
} public static void writeToFile(List<File> list,File destFile) throws IOException{
BufferedWriter bufw=new BufferedWriter(new FileWriter(destFile));
for (File file : list) {
bufw.write(file.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
}
}

三、打印流PrintStream和PrintWriter

打印流--必须是输出流(两个都是)

system.out流就是PrintStream的子类

区别

1.PrintStream(字节流) PrintWriter(字符流)

2.使用PrintStream进行输出,可以不用指定手动刷新或者设置自动刷新即可完成输出,而PrintWriter则不同,

一定要在构造方法中设置自动刷新(构造函数中autoFlush置为true)或者在调用println()方法以后再调用flush(),才可以立即完成输出。

public class PrintStreamDemo {

    public static void main(String[] args) throws IOException {
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
PrintStream out =new PrintStream("print1.txt");
String line=null;
while ((line=bufr.readLine())!=null){
if("over".equals(line))
break;
out.println(line.toUpperCase());
//out.flush();
}
out.close();
bufr.close();
} }
public class PrintWriterDemo {

    public static void main(String[] args) throws IOException {
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//PrintWriter out=new PrintWriter(System.out);
PrintWriter out=new PrintWriter(new FileWriter("PrintWriter.txt"),true); String line=null;
while ((line=bufr.readLine())!=null){
if("over".equals(line))
break;
out.println(line.toUpperCase());
//out.flush();
} out.close();
bufr.close(); } }

四、序列流SequenceInputStream

需求:将三个文件中的数据并到一个文件中

public class SequenceInputStreamDemo {

    public static void main(String[] args) throws IOException {
/*
* 需求:将三个文件中的数据并到一个文件中 */
ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
for (int i = 1; i <= 3; i++) {
al.add(new FileInputStream(i+".txt"));
} Enumeration<FileInputStream> en=Collections.enumeration(al);//使用collection的静态方法获取枚举对象
SequenceInputStream sis=new SequenceInputStream(en); //SequenceInputStream只能接收枚举对象,拼接的序列流对象
FileOutputStream fos=new FileOutputStream("4.txt"); byte[] buf=new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();
} }

IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream的更多相关文章

  1. Java笔记(二十七)……IO流中 File文件对象与Properties类

    File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果 ...

  2. Java IO流中 File文件对象与Properties类(四)

    File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果 ...

  3. IO流-复制多极文件夹(递归实现)

    package com.io.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  4. C# IO操作(五)文件的递归加载

    本篇是一个案例,其核心通过代码展示代码中的递归这个用法,程序的界面如下:

  5. Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)

    第一讲     File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...

  6. IO流(SequenceInputStream序列流--文件拆分与合并)

    一.文件拆分 1.将一个文件按照规定的大小进行分割成多个文件并将被分割详细信息保存至配置信息中 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载,属性列表 ...

  7. java IO之 序列流 集合对象Properties 打印流 流对象

    序列流 也称为合并流. SequenceInputStream 序列流,对多个流进行合并. SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从 第一个输入 ...

  8. JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码

    JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...

  9. JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

    JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...

随机推荐

  1. hibernate(七)组件映射与多对一映射

    一.组件映射 用注解配置组件映射: Husband为我们映射的类,wife是这个类的一部分(属性不能与husband中属性重名,不要写Entity注解,不要有主键) Husband类:(在getWif ...

  2. 模拟java.util.Collection一些简单的用法

    /* 需求:模拟java.util.Collection一些简单的用法! 注意:java虚拟机中并没有泛型类型的对象.泛型是通过编译器执行一个被称为类型擦除的前段转换来实现的. 1)用泛型的原生类型替 ...

  3. 关于CPU Cache -- 程序员需要知道的那些事

    本文将介绍一些作为程序猿或者IT从业者应该知道的CPU Cache相关的知识.本章从"为什么会有CPU Cache","CPU Cache的大致设计架构",&q ...

  4. golang在Windows下Sublime Text开发调试环境的配置

    一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...

  5. Robot Framework自动化测试(七)--- jybot模式

    虽然,很久不用关于Robot Framework框架了,但我这里应该是除了@齐涛-道长之外分享Robot Framework 相关资料比较多的地方了.所以,常常被问到一些关于该框架的问题. 虽然,我一 ...

  6. Clank – 快速构建移动 APP 原型的 HTML/CSS 框架

    Clank 是一个自由和开放源码的 HTML/CSS 框架,可以帮助你轻松创建本地手机或平板电脑应用程序的原型.它着重于提供一致的用户界面,不会刻意去模仿一个特定的 OS .该框架是基于组件的,这样我 ...

  7. [git]撤销的相关命令:reset、revert、checkout

    基本概念 工作区 暂存区 本地版本仓库 远程版本仓库 如果不清晰上面的四个概念,请查看廖老师的git教程 这里我多说几句:最开始我使用git的时候,我并不明白我为什么写完代码要用git的一些列指令把我 ...

  8. Java性能优化

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 注:里面的测试结果会因电脑配置的不同而有所差异!!! 1. 为一些集合定义初始化大小 List.Set.Map都 ...

  9. Android学习笔记之短信验证码的获取和读取

    PS:最近很多事情都拖拖拉拉的..都什么办事效率啊!!! 还得吐槽一下移动运营商,验证码超过五次的时候,直接把我的手机号封闭.真是受够了. 学习笔记: 1.Android之如何获取短信验证码. 2.如 ...

  10. Windows Server 2016正式版14393英文版ISO镜像下载:_X64FRE_ZH-CN.ISO

    http://care.dlservice.microsoft.com/dl/download/F/8/3/F83C7D26-787A-4F43-82B0-7C7BF8A12791/14393.0.1 ...