1.所谓递归(Recursion),就是方法调用自身,对于递归来说,一定有一个出口,让递归结束,只有这样才能保证不出现死循环.

2.作业:给定任意一个目录,以树形方式展现该目录中所有子目录和文件.另外,在展现的时候将目录排在上面,文件排在下面.每一层要加上缩进.

3.Java程序通过流来完成输入/输出.流失生产或消费信息的抽象.流通过Java的输入/输出系统与物理设备链接.尽管与他们链接的物理设备不尽相同,所有流的行为具有同样的方式.这样,相同的输入/输出类和方法适用于所有类型的外设.这意味着一个输入流能够抽象多种不同的类型的输入:从磁盘文件,从键盘,从网络套接字.同样,一个输出流可以输出到控制台,磁盘文件或相连的网络,六十处理输入/输出的一个洁净方法,例如它不需要代码理解键盘和网络的不同.Java中流的实现是在java.io包中定义的层次机构内部的.

4.输入/输出是相对程序来说的:程序使用数据时所扮演的角色有两个:一个是源,一个是目的.

若程序是数据流的源,及数据的提供者,这个数据流对程序来说就是一个"输出数据流"(数据从程序流出).若程序是数据的终点,这个数据流对程序而言就是一个"输入数据流",(数据从程序外流向程序)

5.功能上分:输入流/输出流

6.流结构上:字节流/字符流

7.字节流的基础是InputStream和OutputStream这两个抽象类.

字符流的基础是抽象类Reader和Writer.

8.读数据的逻辑为:

open a stream

while more informatin

read information

close the stream

9.写数据的逻辑:

open a stream

while more information

write information

close the stream

10.第三种分类:节点流:

从特定的地方读写的流类.

与目标交互的一定是节点流.

过滤流:使用节点流作为输入或输出.过滤刘是使用一个已经存在输入流或输出流链接创建的.

11.InputStream和OutputStream为顶层类,他们都是抽象类(abstract).

12.InputStream三个基本读的方法:

abstract int read():读取一个字节数据,并返回读到的数据.如果返回-1,表示读到了输入流的末尾.

int read(byte[] b):将数据读入一个字节数组,同时返回实际读取的字节数.如果返回-1,表示读到了输入流的末尾.

int read(byte[] b,int off,int len):将数据读入一个字节数组,同时返回实际读取的字节数,如果返回-1,表示读到了输入流的末尾.off指定在数组b中存放数据的起始偏移位置;len表示读取的最大字节数.

思考:为什么只有第一个read方法是抽象的,而其余两个read方法是具体的?

因为第二个read方法依靠第三个read方法来实现,而第三个read方法又依靠第一个read方法来实现.所以所只有第一个read方法是与具体的I/O设备相关的,它需要InputStream的子类来实现.

13.FileInputStream类中的read()的实现如下: public native int read() throws IOException;//Java是不能直接和底层打交道,所以委托于c语言实现.因此这个方法表示native.

14.InputStream常用的处理形式:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class IOTest
{
    public static void main(String[] args) throws IOException
    {
        File file = new File("D:/test.txt");
    FileInputStream is  = new  FileInputStream(file);
    byte[] by = new byte[200];
   
   
   
    int length;
   
    while(-1 !=(length = is.read(by)))
    {
    String result =  new String(by,0,length);   
    System.out.println(result);
   
    }
    is.close();//注意使用完流一定要注意关闭.
    }

}

15.递归作业实现:

import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ShowAll
{
    private static int i = 0;
    public static void showAll(File fileName)
    {   
        List<File>   list = new ArrayList<File>();
        File[] files = fileName.listFiles();
        for(File tmp : files)
        {   
            if(!tmp.isFile())
                {
                System.out.println(align(i)+tmp.getName());
                i++;
                showAll(tmp);
                i--;
            }
            else
                list.add(tmp);
        }
        for(File tmp1 : list)
                System.out.println(align(i)+tmp1.getName());
    }
    public static void main(String[] args)
    {
        File f = new File("D:/KwDownload");
        ShowAll.showAll(f);
    }
    public static String  align(int count)
    {
        String space = "|";
        for(int i = 0; i < count * 10; i++)
        {
            space += "-" ;
        }
        return space ;
    }
}

转载于:https://www.cnblogs.com/donaldjohn/archive/2011/03/19/1988987.html

Java SE 第八十八,八十九,九十讲 递归深度剖析 IO流深入详解,递归作业详解相关推荐

  1. java不死神兔总数_Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)...

    1.这个问题是如下的: 有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的对数? 分析:我们找规律 兔子对数 第1个月:   1 第 ...

  2. 第十三章、IO流_File类与递归/基本流/增强流/属性集与打印流__黑马Java第57期个人学习笔记_个人笔记

    第一节.File类与递归 一.File类 (一)概念: 1.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作.(也重写了toString为getPath) 2.绝对路 ...

  3. 面试准备——Java回顾:高级编程(多线程、常用类、集合、泛型、IO流、反射、动态代理、新特性)

    多线程 程序.进程.线程 程序:完成特定任务.用某种语言编写的一组指令的结合,一段静态的代码,静态对象: 进程:程序的一次执行过程,即正在执行的程序: 线程:进程可细化为线程,是一个程序内部的一条执行 ...

  4. Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)

    1.这个问题是如下的:    有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的对数? 分析:我们找规律 兔子对数 第1个月:   ...

  5. Java笔记(22):IO流(04)

    1.登录注册案例IO版实现 在笔记17中的登录注册代码中,只需要修改注册登录的实现类 1 package cn.itcast.dao.impl; 2 3 import java.io.Buffered ...

  6. 【小白学Java】D32》》》IO流 之 序列化流 打印流

    [友情链接]➡➡▶IO流 之 File类 & 递归 [友情链接]➡➡▶IO流 之 过滤器 & 字节流 [友情链接]➡➡▶IO流 之字符流 & 属性集(Properties集合) ...

  7. JAVA(十八)IO流(十六)补充版

    目录 常用流对象 1.文件字节流 1.1文件字节输入流 1.2文件字节输出流 1.3通过缓冲区提高读写效率 1.3.1方法一 1.3.2方法二 1.4字节缓冲流 1.5定义文件拷贝工具类 2.文件字符 ...

  8. 八十七、Python | 十大排序算法系列(上篇)

    @Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  9. @程序员,你的技术为啥十年八年也没有进步?

    作者 | 中华石杉 责编 | 伍杏玲 本文经授权转载自石杉的架构笔记 80% Java工程师都有的迷茫 跟大家聊一聊很多很多很多人问我的一个问题:中小公司的Java工程师该如何规划准备,才能跳槽进入B ...

最新文章

  1. 我希望支持JavaScript GraphQL实现的API
  2. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...
  3. 开发漫谈:RedMonk编程语言流行榜出炉
  4. android获取导航栏宽高,Android获取屏幕的宽高度、状态栏、标题栏、导航栏、编辑区域高度...
  5. fuser 用法简析
  6. mysql开窗函数_魔幻的SQL开窗函数,为您打开进阶高手的一扇天窗
  7. 使用Opencv获取每个像素点的RGB颜色分量/HSV颜色分量
  8. 【自用】Android 双击返回键退出
  9. csdn肿么了,这两天写的博文都是待审核
  10. LINUX操作系统练习题
  11. 无法启动WORKSTATION服务解决方案
  12. 用了三天终于安装成功 jsv8 centos7.6 + 宝塔+ php7.2 安装V8js
  13. 秦小明推荐书单+豆瓣金融TOP12 金融书籍
  14. Android调用系统应用打开各种类型文件
  15. Pycharm中光标变粗 光标进入改写状态
  16. mysql to_days() 逆向函数_mysql的 TO_DAYS() 函数应用实例
  17. win7 关闭java自动更新
  18. 西安电子科技大学计算机期末考试试题答案,西安电子科技大学上期期末考试计算机基础.doc...
  19. Java8常用循环遍历操作方式的效率对比
  20. java上看小说软件_i悦读小说阅读软件 For java

热门文章

  1. ssh 用户名密码登录
  2. 【CSS】字体、行高、文本对齐
  3. 如何测试UDP端口连通性
  4. 使用ingress代理mysql数据库
  5. 奋斗吧,程序员——第四十五章 柔情似水,佳期如梦
  6. 企业架构TOGAF介绍
  7. body软件 human_人体系统女性3D软件破下载|人体系统女性3d专业中文版下载v1.0(Human body female)-乐游网安卓下载...
  8. citus插件安装及使用
  9. 求可以统计网络流量的VC代码,就象是金山网镖下面的那样
  10. 推荐几本最好的web前端开发技术图书