【Java】Java基础之File类与IO流

目录

File类

1、构造方法

2、常用方法

3、判断方法

4、创建删除方法

5、遍历目录方法

IO流

1、字节流

      1.1、字节输出流OutputStream

      1.1.1、字节输出流子类FileOutputStream

扫描二维码关注公众号,回复: 11994354 查看本文章

     1.2、输入流父类InputStream

     1.2.1.输入流子类FileInputStream

2、字符流

      2.1、字符输入流父类Reader

     2.1.2、FileReader类

     2.2.字符输出流父类Writer

     2.2.1、FileWriter类


File类

        File类,应为翻译“文件类”。用于文件操作的类。File表示文件或文件夹的抽象路径,既然是抽象路径,那么当然这个路径是可以存在的也可以是不存在的。File类有以下几个构造方法:

1、构造方法

File类的构造方法
方法 说明
public File(String pathname)

给定路径名称创建File对象

public File(String parent,Stirng child) 给定父路径和子路径创建File对象
public File(File parent,String child) 给定父路径的File类型和子路径创建File对象
import java.io.File;
//在java语言中 ""里面的\必须写成\\
//   \本身是转义字符的意思
public class Test01 {
    public static void main(String[] args) {
        //File的构造方法
        //public File(String pathname)

        //给定路径名称创建File对象
        File f = new File("C:\\Users\\jin\\Desktop\\day10");
        //File f = new File("C:/Users/jin/Desktop/day10");
        System.out.println(f);
        //public File(String parent, String child)

        //给定父路径和子路径创建File对象
        //File f2 = new File("C:\\Users\\jin\\Desktop","day10");
        File f2 = new File("C:\\Users\\jin","Desktop\\day10");
        System.out.println(f2);
        //public File(File parent, String child)

        //给定父路径的File类型和子路径创建File对象
        File f3 = new File("C:\\Users\\jin\\Desktop");
        File f4 = new File(f3,"day10");
        System.out.println(f4);
    }
}

2、常用方法

说完了File类的构造方法,接下来就是File类的常用方法:

File类的常用方法
常用方法 说明
getAbsolutePath() 获取文件的绝对路径
getpath() 获取创建路径
getName() 获取文件或文件夹名称
length() 获取文件字节长度
import java.io.File;
public class Test02 {
    public static void main(String[] args) {
        //获取方法
        File f = new File("C:\\Users\\jin\\Desktop\\123.txt");

        //getAbsolutePath()
        //获取绝对路径(从盘符开始的路径就是绝对路径)
        System.out.println(f.getAbsolutePath());

        //getPath()
        //获取创建对象时的路径
        System.out.println(f.getPath());

        //getName()
        //获取文件名(获取最后一级名字)
        System.out.println(f.getName());

        //length()
        //获取文件大小,不能获取目录的大小
        //文件大小就是文件的字节数
        System.out.println(f.length());   //435字节
    }
}

3、判断方法

         判断方法,用于判断文件或文件夹是否存在,通常使用下面几个

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

import java.io.File;
public class Test04 {
    //判断方法
    public static void main(String[] args) {
        File f = new File("day10\\src");
        //exists()
        //判断路径是否存在
        System.out.println(f.exists());

        //isFile()
        //判断是否是文件,如果不是文件或不存在false
        System.out.println(f.isFile());

        //isDirectory()
        //判断是否是文件夹(目录),如果不是文件夹或不存在false
        System.out.println(f.isDirectory());
    }
}

4、创建删除方法

        当文件或者文件夹不存在的时候,可以直接使用File类进行创建,方法如下:

创建、删除方法
创建、删除方法 说明
createNewFile() 创建新文件
delete() 删除(1、不能删除有文件的文件夹。    2、此方法删除的文件不经过回收站
mkdir() 创建单层文件夹
mkdirs 创建多层文件夹
import java.io.File;
import java.io.IOException;
public class Test05 {
    //创建删除方法
    public static void main(String[] args) throws IOException {

        File f0 = new File("day10\\aaa\\sfsd.txt");
        File f = new File("day10\\aaa");

        //createNewFile()
        //创建一个文件
        f.createNewFile();

        //delete()
        //删除一个文件或空文件夹(不能删除有文件的文件夹)
        //删除方法不走回收站,你别删除有用的文件
        f0.delete();
        f.delete();

        //mkdir()
        //创建单层文件夹
        File f2 = new File("day10\\aaa");
        f2.mkdir();
        
        //mkdirs()
        //创建任意层文件夹
        File f3 = new File("day10\\bbb\\ccc");
        f3.mkdirs();
    }
}

5、遍历目录方法

遍历目录方法
遍历方法 说明
list() 获取目录下所有内容的名称
listFiles() 获取目录下所有内容的File对象形式
import java.io.File;
public class Test06 {
    public static void main(String[] args) {
        File f = new File("C:\\Users\\jin\\Desktop\\day10");
        //list()
        //获取目录下所有内容的名称
        String[] list = f.list();
        //遍历
        for (String s : list) {
            System.out.println(s);
        }

        System.out.println("---------------------------");

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

IO流

       IO流中,I代表的是in,o代表的是out,IO是对于数据的输入和输出。

       IO分类:

        1)按照方向分为:输入流和输出流

        2)按照类型分为:字节流和字符流

        而我要介绍的则是:字节输入流、字节输出流、字符输入流和字符输出流。

                                                  

1、字节流

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

      1.1、字节输出流OutputStream

字节输出流父类OutputStream是一个抽象方法,具有以下常用的方法,我们在创建对象的时候,通常使用的是其子类:FileOutputStream(接下来介绍)

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

      1.1.1、字节输出流子类FileOutputStream

此类具有四个构造方法,如下:

特点: 1)如果要写入文件不存在,不会报错,则会创建相应的文件

            2)使用以下前两种构造方法,则存在字节覆盖问题,后两种不存在覆盖问题

            3)构造方法只能指向文件,不能指向文件夹(报错:拒绝访问。)

构造方法
构造方法 说明
public FileOutputStream(File file) 向指定文件位置输出数据
public FileOutputStream(String name) 向指定字符串路径输出数据
public FileOutputStream(File file, boolean  b) 创建对象的同时是否续写,true表示续写
public FileOutputStream(String name,boolean  b) 创建对象的同时是否续写,true表示续写
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class Test01 {
    public static void main(String[] args) throws FileNotFoundException {
        //字节输出流的构造方法
        /*
            注意事项:
                如果文件不存在构造方法会创建文件
                如果文件已存在构造方法会覆盖文件
                构造方法只能指向文件,不能指向文件夹(报错:拒绝访问。)
                true表示续写,如果文件存在不会覆盖之前的内容,在原来内容的基础上续写
         */
        //new FileOutputStream(String pathname) :参数表示路径名称
        //FileOutputStream fos = new FileOutputStream("day10\\123.txt");

        //new FileOutputStream(File file) :参数表示路径名称
        //FileOutputStream fos2 = new FileOutputStream(new File("day10\\123.txt"));

        //new FileOutputStream(String pathname,boolean b) 
       //:参数表示路径名称,第二个参数表示是否续写
        FileOutputStream fos = new FileOutputStream("day10\\123.txt",true);

        //new FileOutputStream(File file,boolean b) 
        //:参数表示路径名称,第二个参数表示是否续写
        //FileOutputStream fos2 = new FileOutputStream(new File("day10\\123.txt"),true);
    }
}

方法的使用演示:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test02 {
    //FileOutputStream的方法
    public static void main(String[] args) throws IOException {
        //创建对象
        FileOutputStream fos = new FileOutputStream("day10\\123.txt");

        //write(int b)  byte -128 ~ 127
        //输出一个字节,保存的是对应的字符
        fos.write(97);

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

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

        //close()
        //关闭流资源,关闭之后就不能用了
        fos.close();
    }
}

     1.2、输入流父类InputStream

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

     1.2.1.输入流子类FileInputStream

注意事项:
               1) 如果文件不存在,构造方法会报错 (报错:系统找不到指定的文件。)
                2)构造方法只能指向文件,不能指向文件夹(报错:拒绝访问。)

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

构造方法演示:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Test04 {
    public static void main(String[] args) throws FileNotFoundException {
        //字节输入流FileInputStream的构造方法
        //FileInputStream(File file)
        //从指定的File文件读取数据
        FileInputStream fis = new FileInputStream(new File("day10\\123.txt"));

        //FileInputStream(String name)
        //从指定字符串路径位置读取数据
        //FileInputStream fis2 = new FileInputStream("day10\\123.txt");
    }
}

常用方法演示(读字节数组为例):

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class Test06 {
    public static void main(String[] args) throws IOException {
        //创建对象
        FileInputStream fis = new FileInputStream("day10\\123.txt");
        //read(byte[] b)
        //每次读取一个数组的字节,返回值代表读取到的字节个数
        //把数据放到数组中,返回的是字节个数
        //循环
        byte[] arr = new byte[5];
        int len;
        while((len=fis.read(arr)) != -1){
            System.out.print(new String(arr,0,len));
        }
        //close()
        //关闭流资源
        fis.close();
    }
}

2、字符流

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

      2.1、字符输入流父类Reader

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

     2.1.2、FileReader类

注意事项:
      1) 如果文件不存在,会抛出异常(报错:系统找不到指定的文件)
       2)构造方法只能写文件,不能写文件夹(报错:拒绝访问)

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

使用方法:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Test04 {
    //FileReader的构造方法
    public static void main(String[] args) throws FileNotFoundException {
        FileReader fr = new FileReader("day10\\123.txt");
        //FileReader f2 = new FileReader(new File("day10\\123.txt"));
    }
}

一次读取一个字符数组:

import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class Test06 {
    public static void main(String[] args) throws IOException {
        //创建对象
        FileReader fr = new FileReader("day10\\123.txt");

        //read(char[] arr)
        //每次读取多个字符,返回值表示读到的字符个数,如果读到了末尾返回-1
       //循环
        char[] chs = new char[5];
        int len;
        while((len=fr.read(chs)) != -1){
            System.out.println(new String(chs,0,len));
        }
        //关闭流资源
        fr.close();
    }
}

     2.2.字符输出流父类Writer

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

     2.2.1、FileWriter类

注意事项:
        1) 如果文件不存在,会自动创建文件
        2) 如果文件已存在,会覆盖原有文件
        3) 构造方法中只能写文件,不能写文件夹(报错:拒绝访问。)
         4)如果加上一个true,表示在原有文件内容上续写

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

构造方法:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Test01 {
    public static void main(String[] args) throws IOException {
        //字符输出流FileWriter构造方法

        //new FileWriter(String name)
        //FileWriter fw = new FileWriter("day10\\123.txt");

        //new FileWriter(File file)
        //FileWriter fw2 = new FileWriter(new File("day10\\123.txt"));

        //new FileWriter(String name,boolean b)
        //FileWriter fw = new FileWriter("day10\\123.txt",true);

        //new FileWriter(File file,boolean b)
        FileWriter fw = new FileWriter(new File("day10\\123.txt"),true);
    }
}

常用方法:

import java.io.FileWriter;
import java.io.IOException;
public class Ttest03 {
    public static void main(String[] args) throws IOException {

        //FileWriter的输出方法
        FileWriter fw = new FileWriter("day10\\123.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,2,2);

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

        //关闭
        fw.close();
    }
}

字节流:
           操作文本文档以外的数据时一定使用字节流

字符流:
           操作文本文档就用字符流

猜你喜欢

转载自blog.csdn.net/weixin_43267344/article/details/108134283