JAVA11_23学习总结(IO)

今日内容

1. File

File
    高级功能
        public File[] listFiles
            ---获取指定路径下的所有file数组
        public String[] list()
            ---指定路径下的所有文件和目录
        public File[] listFiles(FileFilter filter)
            ---测试指定的抽象路径名是否应包含在路径名列表中
            --FileFilter接口
                --重写方法boolean accept(File pathname)--测试条件
                    -pathname-被测试的文件
        public File[] listFiles(FilenameFilter filter)
            ---测试指定文件是否应包含在文件列表中
            --FilenameFilter接口--过滤器作用
                --重写方法boolean accept(File dir , String name)
                    -File dir-找到该文件的目录
                    -String name-文件的名称
import java.io.File;
//利用public File[] listFiles()方法
public class FileTest {
    public static void main(String[] args) {
        //File构造方法,访问磁盘目录
        File file = new File("D:\\");
        //直接输出file是地址值---利用listFiles方法转换成数组
        File[] files = file.listFiles();
        //遍历数组输出
        for (File f: files){
            //不带.getName()是系统默认格式
            System.out.println(f.getName());
        }
    }
}
import java.io.File;
​
//利用public String[] list()方法
public class FileTest {
    public static void main(String[] args) {
        //File无参构造访问磁盘
        File file = new File("D:\\");
        //调用方法--输出成字符串数组
        String[] str = file.list();
        //遍历数组
        for (String s: str){
            System.out.println(s);
        }
    }
}
import java.io.File;
import java.io.FileFilter;
​
//测试方法public File[] listFiles(FileFilter filter)
//FileFilter接口--重写accept方法
public class FileTest {
    public static void main(String[] args) {
        //创建File无参构造访问磁盘
        File file = new File("D:\\");
        //调用方法
        File[] files = file.listFiles(new FileFilter() { //匿名内部类
            @Override
            public boolean accept(File pathname) { //重写方法--写入判断条件
                //返回值直接判断file-D:盘下,是否有--是文件而且后缀名是.txt的文件
                return (pathname.isFile() && pathname.getName().endsWith(".txt"));
            }
        }) ;
        //遍历输出
        for (File file1: files){
            System.out.println(file1.getName());
        }
    }
}
import java.io.File;
import java.io.FilenameFilter;
​
//测试public File[] listFiles(FilenameFilter filter)
public class FileTest {
    public static void main(String[] args) {
        //创建File无参构造访问磁盘
        File file = new File("D:\\");
        //调用方法--匿名内部类实现
        File[] file1 = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                File f = new File(dir,name);
                //判断f是否是文件
                boolean flag = f.isFile();
                //判断f后缀是否是.txt
                boolean flag1 = f.getName().endsWith(".txt");
                //两者都满足返回true,否则false
                return flag && flag1;
            }
        }) ;
        //循环遍历
        for (File file2: file1){
            System.out.println(file2.getName());
        }
    }
}

2.递归

递归
    递归是一种思想
        --在程序中--方法自己调用自己!--循环
    递归的前提
        是一个方法
        有循环规律
        有结束循环的条件!
    注意
        递归不是方法嵌套方法--是自己调用自己
        如果没有结束循环的条件,会一直递归下去,没有结果--死递归
        构造方法没有递归!
/*
    有一个很有名的数学逻辑题叫做不死神兔问题。
       有一对兔子,
      从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
      问第二十个月的兔子对数为多少?
​
   分析规律        兔子对数
       第一个月:       1
       第二个月:       1
       第三个月:       2
       第四个月:       3
       第五个月:       5
       规律:从第三个月开始,每个月兔子的对数是前两月兔子对数之和
           ---n月份兔子对数 = (n-1)月份兔子对数 + (n-2)月份兔子对数
 */
public class DiGuiTest {
    public static void main(String[] args) {
        int sum = Sum(20);
        //输出总数
        System.out.println(sum);
    }
    //定义方法
    public static int Sum(int num){ //传入问题的最终月数
        //因为前两个月数量不变,所以加入判断
        if (num==1 || num==2){ //当月份减到2月和1月时--也是结束条件!
            return 1 ;//返回1对
        }else {
            return Sum(num-1)+Sum(num-2);//返回(月份-1)+(月份-2)
        }
    }
}

3. IO

IO
    分类
        流的方向划分
            输入流--读--read--往里读
            输出流--写--write--往外写
        流的类型划分
            字节流-按方向划分
                字节输入流--InputStream
                            --无法实例化
                                -具体的子类-FileInputStream
                字节输出流--OutputStream
                            --无法实例化
                                -具体的子类-FileOutputStream
                字节缓冲流--高效!
                    字节缓冲输入流
                        --BufferedInputStream
                    字节缓冲输出流
                        --BufferedOutputStream
            字符流--与字节流类似
                字符输入流
                字符输出流
字节输出流--OutputStream
    具体子类
        FileOutputStream
        构造方法
            public FileOutputStream(File file)
                ---需要先创建File file = new File("抽象路径");
                    ---将抽象路径传入FileOutputStream
            public FileOutputStream(String pathname)
                ---后面直接跟路径名称
            public FileOutputStream(String name , boolean append)
                ---在指定的文件后继续追加书写而不是覆盖--前提是append为true
        成员方法
            public void write(int b)
                ---写一个字节
            public void write(byte[] bytes)
                ---写一个字节数组
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
​
//测试字节输出流方法
public class IOTest {
    public static void main(String[] args) throws IOException {
        //构造方法1
        File file = new File("D:\\这是第二个测试用文件.txt");
        FileOutputStream output = new FileOutputStream(file);
        //构造方法2
        FileOutputStream output1 = new FileOutputStream("D:\\这是第三个测试用文件.txt");
        //写文件--写一个字节
        output.write(97);
        //写文件--写一个数组字节
        byte[] bytes ={97,98,99,100};
        output.write(bytes);
    }
}
import java.io.FileOutputStream;
import java.io.IOException;
​
//测试追加书写
public class IOTest {
    public static void main(String[] args) throws IOException {
        //有参构造创建要追加书写的文件,为true
        FileOutputStream output = new FileOutputStream("d:\\这是第二个测试用文件.txt",true);
        //追加书写
        output.write(97);
    }
}
字节输入流--InputStream
    具体子类
        FileInputStream
    成员方法
        public int read() throws IOException
            ---一次读取一个字节,返回字节数
        public int read(byte[] b) throws IOException
            ---一次读取一个字节数组
    注意
        文件字节输入流一次读取一个字节,将文件内容输出控制台上,中文出现乱码
          因为
            字节流读取字节的时候---将字节--->强转成char
             当英文的后面有中文拼接无法解析强转了--->乱码---->java才提供了字符流
        传统的IO流
            BIO阻塞式流
                --多个线程同时在操作的时候,一个线程在使用io流进行操作时候,其他线程处于阻塞式
        NIO:非阻塞式流
什么时候使用字符流?
    什么时候使用字符流
        打开记事本能读懂的就使用字符
    什么时候使用字节流
        打开记事本读不懂,就使用字节!---读图片文件-视频-音频
import java.io.FileInputStream;
import java.io.IOException;
​
//测试字节输入流
public class IOTest {
    public static void main(String[] args) throws IOException {
        FileInputStream input = new FileInputStream("d:\\这是第二个测试用文件.txt");
        //一次读一个字节数组
        byte[] bytes = new byte[5] ;//读五个字节
        //判断文件里面是否为空
        int len = 0 ;//定义一个接收变量
        if ((len=input.read(bytes))!=-1){
            //输出数组里的内容,从0位置开始,长度为len
            System.out.println(new String(bytes,0,len));//aabcd
        }
    }
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
​
//测试读写联动--复制文件
public class IOTest {
    public static void main(String[] args) throws IOException {
        //创建读--读取目标文件
        FileInputStream input = new FileInputStream("d:\\这是第二个测试用文件.txt");
        //创建写--写进目标文件夹
        FileOutputStream output = new FileOutputStream("d:\\SZR\\这是一个复制文件.txt");
        //按数组读取--按字节读取太慢
        byte[] bytes = new byte[1024];//一般为1024的倍数!
        int len = 0 ;//接收数据
        if ((len=input.read(bytes))!=-1){ //判断非空
            output.write(len);//写操作
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五目炒饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值