Java中流的概念和递归算法
文件类:
java.io.File
基本方法;
geName: 获取文件名称
getPath: 获取文件路径
length: 获取文件大小
isDirectory: 判断这个东西是不是一个目录
isFile: 判断这个东西是不是一个文件
listFiles: 获取当前这个路径下面所有的文件和文件夹
IO流
什么是流
流, 可以看成是一根管道, 用来读取文件的数据
原始的数据都是用过二进制的形式来进行数据的传输,
文件---10111010-->程序
文件<--10111010---程序
流的分类
按照数据流的方向
输入流(Input), 输出流(Output)
输入流: 从文件往程序走数据
输出流: 从程序往文件走数据
按照处理数据的单位不同:
八大数据类型所占字节数:
byte(1), short(2), int(4), long(8)
float(4), double(8)
boolean(1)
char(2)
字节流(以stream结尾的), 字符流(以Reader, Writer结尾的)
字节流: 一个字节占8位, 以一个字节为单位读数据
字符流: 一个字符占两个字节, 以一个字符为一个单位
按照功能分
节点流, 处理流
节点流: 只有一个根管道套在文件上进行传输
处理流: 将节点流处理一下, 增强管道的功能, 相当于在管道上套一层
JDK提供的流
提供了四个基本抽象类: InputStream, OutputStream, Reader, Writer
InputStream的基本方法:
int read(): 每次调用这个方法, 就读取一个字节, 以整数的形式返回
int read(byte[] buffer---缓冲区): 让流每次读满一个缓冲区, 再统一处理, 先存在缓冲区里, 返回值int是返回实际当中读取了多少字节数(伤硬盘的原理)
int read(byte[] buffer, int offset, int length): 也是一个缓冲区, 读取length长度的字节数, 存到buffer的缓冲区里, 从buffer的offset位置开始存,
返回值是实际读了多少字节数
close(): 关闭资源
OutputStream的基本方法:
void write(int b)
void write(byte[] b)
int read(byte[] buffer, int offset, int length)
close()
flush(): 将缓冲区中的文件全部写出
在使用流的时候的一个良好的习惯, 先flush, 再close
Reader的基本方法:
int read()
int read(char[] c)
int read(char[] c, int offset, int length)
close()
Writer的基本方法
void write()
void write(char[] c)
void write(char[] c, int offset, int length)
// 直接写一个字符串出去, 字符串里面的有一个方法s.toCharArray(), 查API
void write(String s)
void write(String s, int offset, int length)
close()
flush()
文件流(字节流, 字符流)
缓冲流
转换流--->字节-字符
数据流--->八大数据类型
Print流--->System.out.println();
Object流--->
递归实例:
package com.hanqi; import java.io.File; public class TestFileDiGui { public static void main(String[] args) { int a = 4; * 8*7*6....*1 int j = fact(a); System.out.println(j); File file = new File("e:\\java\\folder"); // System.out.println(file.exists()); File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { System.out.println(files[i].getName()); } factFile(file, 0); } public static void console(int k) { for(int a=0;a<k;a++) { System.out.print(" "); } } public static void factFile(File file, int length) { if(file.exists() && file.isDirectory()) { File[] fs = file.listFiles(); for(int i = 0;i<fs.length;i++) { console(length); System.out.println(fs[i].getName()); factFile(fs[i], length + 1); } } } public static int fact(int i) { int result = 0; if(i==1) { return i; } else { result = i * fact(i-1); } return result; } }