Java中流的概念和递归算法

Posted yinyanlei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
    
}

 








以上是关于Java中流的概念和递归算法的主要内容,如果未能解决你的问题,请参考以下文章

Java中流的概念

Java基础入门五)之方法以及递归算法

浅谈Java中流的概念与用途

Java数据结构—递归

算法与程序设计:递归

js实现递归算法