java基础--File类及IO流

目录

1.File类

1.1概述

1.2构造方法

1.3获取方法

1.4绝对路径和相对路径

1.5判断方法

1.6创建删除方法

1.7遍历目录的方法

1.8查找文件夹中所有java文件

2.IO流

2.1什么是IO

2.2IO的分类

3.字节流

3.1字节输出流父类OutputStream

3.2字节输出流子类FileOutputStream

3.3输入流父类InputStream

3.4输入流子类FleInputStream

4.字符流

4.1字符输入流父类Reader

4.2字符输入流子类FileReader

4.3字符输出流父类Writer

4.4字符输出流子类FileWriter类


1.File类

1.1概述

        File类表示文件或文件夹的抽象路径。抽象路径的意思是路径可以存在也可以不存在。

1.2构造方法

        方法介绍:

方法说明
public File(String pathname)给定路径创建File对象
public File(String parent,String child)给定父路径和子路径创建File对象
public File(File parent,String child)给定父路径的File对象和子路径创建File对象

        示例:

        //给定路径创建File对象
        File file1 = new File("E:\\study\\test01.txt");
        System.out.println(file1);

        //给定父路径和子路径创建File对象
        File file2 = new File("E:\\study","test02.txt");
        System.out.println(file2);

        //给定父路径的File对象和子路径创建File对象
        File parent = new File("E:/study");
        File file3 = new File(parent,"test03.txt");
        System.out.println(file3);

        输出结果:

E:\study\test01.txt
E:\study\test02.txt
E:\study\test03.txt

        File类只是代表文件或文件夹的抽象类路径。

1.3获取方法

        方法介绍:

方法说明
getAbsolutePath()获取绝对路径
getPath()获取创建对象时的路径
getName()获取文件名
length()获取文件大小(文件夹不行)

        示例:

        File file = new File("C:\\Users\\levi\\Desktop\\123.png");

        //getAbsolutePath   获取File对象的绝对路径(从盘符开始)
        System.out.println(file.getAbsolutePath());

        //getPath   获取穿件File对象时传入的路径
        System.out.println(file.getPath());

        //getName   获取文件名
        System.out.println(file.getName());

        //length    获取文件大小 无法获取文件夹大小
        System.out.println(file.length());

        输出结果:

C:\Users\levi\Desktop\123.png
C:\Users\levi\Desktop\123.png
123.png
57437

1.4绝对路径和相对路径

        绝对路径:从盘符开始的路径叫绝对路径。

        相对路径:不以盘符开始写的路径就是相对路径。

1.5判断方法

        方法介绍:

方法说明
exists()判断路径是否存在
isFile()判断是否是文件
isDirectory()判断是否是文件夹

        示例:

        File file = new File("abc.txt");
        File file2 = new File("src\\study");

        //exists    判断路径是否存在
        System.out.println(file.exists());
        System.out.println(file2.exists());

        //isFile    判断是否是文件
        System.out.println(file.isFile());
        System.out.println(file2.isFile());

        //isDirectory   判断是否是文件夹
        System.out.println(file.isDirectory());
        System.out.println(file2.isDirectory());

1.6创建删除方法

        方法介绍:

方法说明
createNewFile()创建一个文件
delete()删除一个文件或空文件夹(不可以删除有文件的文件夹)
mkdir()创建单层文件夹
mkdirs()创建任意层文件夹

        示例:

        File file1 = new File("src\\study\\fileAndIO\\abc.txt");
        
        //createNewFile 创建文件
        try {
            file1.createNewFile();
        } catch (IOException e) {
            System.out.println("创建文件异常");
        }

        //mkdir 创建单层文件夹
        File file2 = new File("src\\study\\fileAndIO\\aaa");
        file2.mkdir();

        //mkdird    创建任意层文件夹
        File file3 = new File("src\\study\\fileAndIO\\bbb\\ccc");
        file3.mkdirs();

        //delete    删除一个文件或文件夹
        file1.delete();
        file2.delete();

1.7遍历目录的方法

        方法介绍:

方法说明
list()获取目录下所有内容的名称
listFiles()获取目录下所有内容的File对象形式

        示例:

         File file = new File("C:\\Users\\levi\\Desktop\\web文档");

        //list  获取目录下所有内容的名称
        String[] list = file.list();
        for (int i = 0; i < list.length; i++) {
            System.out.println(list[i]);
        }

        //listFiles 获取目录下所有内容的File对象形式
        File[] files = file.listFiles();
        for (File f : files){
            System.out.println(f);
        }

        遍历文件夹,输出文件夹下java文件

        File file = new File("C:\\Users\\levi\\Desktop\\web文档");

        //遍历文件夹 获取以.java结尾的文件
        String[] list = file.list();
        for (String s : list) {
            if (s.endsWith(".java")) System.out.println(s);
        }

        执行结果:

1.java
1234.java
2.java
3.java

        我们发现1234.java是个文件夹,也跟着输出了,所以我们需要换一种方法去找java文件。

        File file = new File("C:\\Users\\levi\\Desktop\\web文档");

        //遍历文件夹 获取以.java结尾的文件
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isFile() && f.getName().endsWith(".java")) System.out.println(f.getName());
        }

        执行结果:

1.java
2.java
3.java

1.8查找文件夹中所有java文件

        利用递归的思想,将每一层文件夹下的文件进行判断。

    public static void main(String[] args) {
        method(new File("C:\\Users\\levi\\Desktop\\web文档"));
    }

    public static void method(File file){
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isFile()){
                if (f.getName().endsWith(".java")) System.out.println(f);
            } else {
                method(f);
            }
        }
    }

2.IO流

2.1什么是IO

        I就是in,O就是out。IO对于数据就是输入和输出。

2.2IO的分类

3.字节流

        在计算机中任何数据都是以字节的方式保存的。字节流可以以字节的方式来操作数据。

3.1字节输出流父类OutputStream

        常用方法:

方法说明
close()关闭流资源
write(byte[] b)输出字节数组
write(byte[] b,int off,int len)输出字节数组的一部分,off表示开始索引,len表示字节个数
write(int b)输出一个字节

3.2字节输出流子类FileOutputStream

        构造方法:

方法说明
public FileOutputStream(File file)向指定文件位置输出数据
public FileOutputStream(String name)向指定字符串路径输出数据
public FileOutputStream(File file,boolean b)创建对象的同时指定是否续写true表示是
public FileOutputStream(String name,boolean b)创建对象的同时指定是否续写true表示是

        构造方法示例:

        /**
         * 注意事项 :
         *          如果文件不存在,构造方法会创建文件。
         *          如果文件存在,构造方法会覆盖文件。
         *          构造方法不可以指向文件夹(拒绝访问)
         */

        //new FileOutputStream(String pathName)
        FileOutputStream fos1 = new FileOutputStream("src\\study\\IO\\123.txt");

        //new FileOutputStream(File file)
        FileOutputStream fos2 = new FileOutputStream(new File("src\\study\\IO\\123.txt"));

        /**
         * 第二个参数的布尔值表示是否续写。
         * 如果为true,创建文件不会覆盖,而是在原来的文件上继续写。
         * 如果为false,创建文件覆盖。
         */
        //new FileOutputStream(String pathName,Boolean b)
        FileOutputStream fos3 = new FileOutputStream("src\\study\\IO\\123.txt",true);

        //new FileOutputStream(File file,Boolean b)
        FileOutputStream fos4 = new FileOutputStream(new File("src\\study\\IO\\123.txt"),true);

        常用方法示例:

        FileOutputStream fos = new FileOutputStream("src\\study\\IO\\123.txt");

        //write(int b)	输出一个字节  输出一个字节,一个字节的取值范围 -128~127
        fos.write(97);
        //填写的是数字,输出的是对应的字符

        //write(byte[] b)	输出字节数组
        byte[] arr = {98, 99, 100,101,102};
        fos.write(arr);

        String str = "---我爱java---";
        byte[] bytes = str.getBytes();
        fos.write(bytes);

        //write(byte[] b,int off,int len)	输出字节数组的一部分,off表示开始索引,len表示字节个数
        fos.write(arr,2,3);

        //close()	关闭流资源 关了之后就不能再用了
        fos.close();//如果不关闭,文件一直在占用不会释放资源

3.3输入流父类InputStream

        常用方法:

方法说明
close()关闭流资源
read()每次读取一个字节,返回值代表的是字节的值
read(byte[] b)每次读取一个数组的字节,返回值代表读取到的字节个数

3.4输入流子类FleInputStream

        构造方法:

方法说明
FileInputStream(File file)从指定的File文件读取数据
FileInputStream(String name)从指定字符串路径位置读取数据

        构造方法示例:

        /**
         * 注意事项:
         *      如果文件不存在,构造方法会报错(系统找不到指定文件)
         *      构造方法只能指向一个文件,不可以指向文件夹。(拒绝访问)
         */
        //FileInputStream(File file)
        FileInputStream fis1 = new FileInputStream("src\\study\\IO\\123.txt");

        //FileInputStream(String name)
        FileInputStream fis2 = new FileInputStream(new File("src\\study\\IO\\123.txt"));

        常用方法示例:

        FileInputStream fis = new FileInputStream("src\\study\\IO\\123.txt");

        //read()
        //每次读取一个字节,返回值代表的是字节的值
        /*System.out.println(fis.read());//97 a
        System.out.println(fis.read());//98 b
        System.out.println(fis.read());//13 \r
        System.out.println(fis.read());//10 \n
        System.out.println(fis.read());//99 c
        System.out.println(fis.read());//-1 如果返回了一个-1,则表示读到了末尾,没有数据了*/
        int i ;
        while((i = fis.read()) != -1){
           System.out.println(i);
        }

        //read(byte[] b)
        //每次读取一个数组的字节,返回值代表读取到的字节个数

        //close()
        //关闭流资源
        fis.close();
        FileInputStream fis = new FileInputStream("src\\study\\IO\\123.txt");

        //read(byte[] b)
        //每次读取一个数组的字节,返回值代表读取到的字节个数
        //将输入读到数组中,返回的是读取到的字节个数
        //byte[] arr = new byte[10];
        //System.out.println(fis.read(arr));//5
        //System.out.println(Arrays.toString(arr));//[97, 98, 13, 10, 99, 0, 0, 0, 0, 0]

        /*byte[] arr = new byte[4];
        System.out.println(fis.read(arr));//4
        System.out.println(Arrays.toString(arr));//[97, 98, 13, 10]

        System.out.println(fis.read(arr));//1
        System.out.println(Arrays.toString(arr));//[99, 98, 13, 10]

        System.out.println(fis.read(arr));//-1      文件读取到最后 返回-1表示没有了
        System.out.println(Arrays.toString(arr));//[99, 98, 13, 10]*/

        byte[] arr = new byte[4];//每次读取4个字节
        int len;//读到的字节个数
        while ((len = fis.read(arr)) != -1){//读到的字节个数不等于-1 说明读到东西了 读到了几个len就是几
            String str = new String(arr,0,len);//通过字节数组构造字符串,从第一个字节开始,获取len个字节拼成字符串
            System.out.print(str);
        }

        //close()
        //关闭流资源
        fis.close();

4.字符流

        字符流专门用来操作中文文本,因为一个中文占用多个字节。

4.1字符输入流父类Reader

        常用方法:

方法说明
close()关闭流资源
read()读取一个字符
read(char[] chs)读取一个字符数组的内容

4.2字符输入流子类FileReader

        构造方法:

方法说明
FileReader(File file)使用File对象的路径创建输入流
FileReader(String fileName)使用字符串路径创建输入流

        构造方法示例:

         /*
            注意事项:
                如果文件不存在,会抛出异常(报错:系统找不到指定的文件)
                构造方法只能写文件,不能写文件夹(报错:拒绝访问)
         */
        FileReader fr = new FileReader("src\\study\\IO\\中文.txt");
        FileReader fr2 = new FileReader(new File("src\\study\\IO\\中文.txt"));

        常用方法示例:

        FileReader fr = new FileReader("src\\study\\IO\\中文.txt");

        //read()	读取一个字符
        /*System.out.println(fr.read());//25105
        System.out.println(fr.read());//29233
        System.out.println(fr.read());//106
        System.out.println(fr.read());//97
        System.out.println(fr.read());//118
        System.out.println(fr.read());//97
        System.out.println(fr.read());//-1*/

        int i;
        while ((i = fr.read()) != -1){
            //System.out.println(i);
            System.out.print((char) i);
        }
        
        //close 关流
        fr.close();
        FileReader fr = new FileReader("src\\study\\IO\\中文.txt");

        //read(char[] chs)	读取一个字符数组的内容 返回读到的字符数量,读到的内容封装在数组中
        char[] chs = new char[4];
        int len;
        while ((len = fr.read(chs)) != -1){
            System.out.print(new String(chs,0,len));
        }

        //close 关流
        fr.close();

4.3字符输出流父类Writer

        常用方法:

方法说明
close()关闭流资源
flush()刷新
write(int c)写出一个字符
write(char[] cbuf)写出一个字符数组的内容
write(char[] b, int off, int len)写出一个字符数组的一部分
write(String str)写出一个字符串

4.4字符输出流子类FileWriter类

        构造方法:

方法说明
FileWriter(File file)用File对象所表示的路径创建输出流对象
FileWriter(String fileName)File字符串所表示的路径创建输出流对象
FileWriter(File file,boolean b)用File对象所表示的路径创建输出流对象,true表示续写
FileWriter(String fileName,boolean b)File字符串所表示的路径创建输出流对象,true表示续写

        构造方法示例:

        /*
            注意事项:
                如果文件不存在,会自动创建文件
                如果文件已存在,会覆盖原有文件
                构造方法中只能写文件,不能写文件夹(报错:拒绝访问。)
                如果加上一个true,表示在原有文件内容上续写
         */
        FileWriter fw1 = new FileWriter("src\\study\\IO\\中文.txt");
        FileWriter fw2 = new FileWriter(new File("src\\study\\IO\\中文.txt"));
        FileWriter fw3 = new FileWriter("src\\study\\IO\\中文.txt",true);
        FileWriter fw4 = new FileWriter(new File("src\\study\\IO\\中文.txt"),true);

        常用方法示例:

        FileWriter fw = new FileWriter("src\\study\\IO\\中文.txt");

        /**
         * 在输出数据时,会先进入缓冲区,如果缓冲区满了或者刷新时,才会将缓冲区的数据写入到文件中.
         */
        //write(int c)写出一个字符
        fw.write(97);
        fw.write(98);

        //flush()刷新
        fw.flush();//将缓冲区的数据写入到文件中

        //close()关闭流资源
        fw.close();//释放流资源时,会自动刷新缓冲区剩余内容
        FileWriter fw = new FileWriter("src\\study\\IO\\中文.txt");
        //write(int c)写出一个字符
        fw.write(97);
        fw.write('a');
        fw.write('我');

        //write(char[] cbuf)写出一个字符数组的内容
        char[] arr = {'a','b','c','d'};
        fw.write(arr);

        //write(char[] b, int off, int len)写出一个字符数组的一部分
        fw.write(arr,1,3);

        //write(String str)写出一个字符串
        fw.write("我爱java");

        fw.close();//释放流资源时,会自动刷新缓冲区剩余内容

以上就是部分io流的知识点啦,后续会继续补充。各位大佬如发现有知识点错误或者有不同的建议与意见,欢迎评论、私信指正,本人才疏学浅还需向各位大佬学习,还请不吝赐教!在此感谢各位的观看!谢谢!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值