Java SE 第八十八,八十九,九十讲 递归深度剖析 IO流深入详解,递归作业详解
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流深入详解,递归作业详解相关推荐
- java不死神兔总数_Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)...
1.这个问题是如下的: 有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的对数? 分析:我们找规律 兔子对数 第1个月: 1 第 ...
- 第十三章、IO流_File类与递归/基本流/增强流/属性集与打印流__黑马Java第57期个人学习笔记_个人笔记
第一节.File类与递归 一.File类 (一)概念: 1.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作.(也重写了toString为getPath) 2.绝对路 ...
- 面试准备——Java回顾:高级编程(多线程、常用类、集合、泛型、IO流、反射、动态代理、新特性)
多线程 程序.进程.线程 程序:完成特定任务.用某种语言编写的一组指令的结合,一段静态的代码,静态对象: 进程:程序的一次执行过程,即正在执行的程序: 线程:进程可细化为线程,是一个程序内部的一条执行 ...
- Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)
1.这个问题是如下的: 有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的对数? 分析:我们找规律 兔子对数 第1个月: ...
- Java笔记(22):IO流(04)
1.登录注册案例IO版实现 在笔记17中的登录注册代码中,只需要修改注册登录的实现类 1 package cn.itcast.dao.impl; 2 3 import java.io.Buffered ...
- 【小白学Java】D32》》》IO流 之 序列化流 打印流
[友情链接]➡➡▶IO流 之 File类 & 递归 [友情链接]➡➡▶IO流 之 过滤器 & 字节流 [友情链接]➡➡▶IO流 之字符流 & 属性集(Properties集合) ...
- JAVA(十八)IO流(十六)补充版
目录 常用流对象 1.文件字节流 1.1文件字节输入流 1.2文件字节输出流 1.3通过缓冲区提高读写效率 1.3.1方法一 1.3.2方法二 1.4字节缓冲流 1.5定义文件拷贝工具类 2.文件字符 ...
- 八十七、Python | 十大排序算法系列(上篇)
@Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...
- @程序员,你的技术为啥十年八年也没有进步?
作者 | 中华石杉 责编 | 伍杏玲 本文经授权转载自石杉的架构笔记 80% Java工程师都有的迷茫 跟大家聊一聊很多很多很多人问我的一个问题:中小公司的Java工程师该如何规划准备,才能跳槽进入B ...
最新文章
- 我希望支持JavaScript GraphQL实现的API
- python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...
- 开发漫谈:RedMonk编程语言流行榜出炉
- android获取导航栏宽高,Android获取屏幕的宽高度、状态栏、标题栏、导航栏、编辑区域高度...
- fuser 用法简析
- mysql开窗函数_魔幻的SQL开窗函数,为您打开进阶高手的一扇天窗
- 使用Opencv获取每个像素点的RGB颜色分量/HSV颜色分量
- 【自用】Android 双击返回键退出
- csdn肿么了,这两天写的博文都是待审核
- LINUX操作系统练习题
- 无法启动WORKSTATION服务解决方案
- 用了三天终于安装成功 jsv8 centos7.6 + 宝塔+ php7.2 安装V8js
- 秦小明推荐书单+豆瓣金融TOP12 金融书籍
- Android调用系统应用打开各种类型文件
- Pycharm中光标变粗 光标进入改写状态
- mysql to_days() 逆向函数_mysql的 TO_DAYS() 函数应用实例
- win7 关闭java自动更新
- 西安电子科技大学计算机期末考试试题答案,西安电子科技大学上期期末考试计算机基础.doc...
- Java8常用循环遍历操作方式的效率对比
- java上看小说软件_i悦读小说阅读软件 For java