(三)流-概念和分类

流的的分类

流按其流向:

输入流:外部文件流入内存

输出流:内存流出到外部文件

流按数据传输单位;

字节流  :用来读写8位二进制的字节

字符流:用来读写16位二进制的字符

流按功能;

节点流:用于直接操作目标设备的流   例如:磁盘或一块内存区域

过滤流:是对一个已存在的流的链接和封装

 

File类的案例(迭代一个目录,并把目录结构按层次显示)

package com.tanlei.cn;


import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class IteratorDirDemo {
  public static void main(String[] args) {
     File file=new File("D:\\360");
     IteratorUtil.IteratorDir(file);
}
}

class  IteratorUtil{
    private static int level=0;//保存层级数
    public static  void IteratorDir(File file) {
        if(file!=null) {
            //找出递归的出口
            //假设是文件或者是空文件夹
            if(file.isFile()||file.listFiles().length==0) {
                return;
            }else {
                File[] files=file.listFiles();
                //要求是先输出文件夹再输出文件
                files=sort(files);
                for(File file2 :files) {
                    //这是一个动态字符串
                    StringBuilder sd=new StringBuilder();
                    if(file2.isFile()) {
                        sd.append(getTab(level));
                        sd.append(file2.getName());
                        
                    }else {
                        sd.append(getTab(level));
                        sd.append(file2.getName());
                        sd.append("\\");
                    }
                    
                    System.out.println(sd.toString());
                    
                    //假如是文件夹
                    if (file2.isDirectory()) {
                       level++;//进入目录遍历,层级加1
                       IteratorDir(file2);//递归调用遍历目录的方法
                       level--;//目录层级减一,返回上一级目录,继续打印输出
                    }
                    
                }
            }
        }
    }
    /**
     * 对file的数组进行先目录后文件的 排序
     *tanlei
     *2018年9月13日 
     *
     */
    private static File[] sort(File[] files) {
        List<File> flList=new ArrayList<File>();
        //先放目录,
        for(File f:files) {
            if(f.isDirectory()) {
                flList.add(f);
            }
        }
        //存放文件
        for(File f:files) {
            if(f.isFile()) {
                flList.add(f);
            }
        }
        //把集合中的元素转换成指定大小和指定类型的数组
        return flList.toArray(new File[flList.size()]);
    }
    
    //根据层级数来得到\t的个数
    private static String getTab(int level) {
        StringBuilder sBuilder=new StringBuilder();
        for(int i=0;i<level;i++) {
            sBuilder.append("\t");
        }
        return sBuilder.toString();
    }
}

 

posted @ 2018-09-13 21:16  言西早石头侠  阅读(257)  评论(0编辑  收藏  举报