(三)流-概念和分类
流的的分类
流按其流向:
输入流:外部文件流入内存
输出流:内存流出到外部文件
流按数据传输单位;
字节流 :用来读写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(); } }