目录

一、FileInputStream 文件输入流

二、FileOutputStream 文件输出流

三、FileReader 字符流

四、FileWriter 字符流


一、FileInputStream 文件输入流

1、单个字节读取文件

   public void readFile01(){        //文件路径        String filePath = "d:\\hello.txt";        //用于接收单个字节        int readData = 0;        //初始化FileInputStream,首先置为空        FileInputStream fileInputStream = null;        try {            //创建FileInputStream 对象,用于读取 文件            fileInputStream = new FileInputStream(filePath);            //从该输入流读取一个字节的数据,如果没有输入可用,此方法将被阻止            //如果返回-1,表示读取完毕            while((readData = fileInputStream.read()) != -1){                System.out.print((char) readData);//转成char显示            }        } catch (IOException e) {            e.printStackTrace();        }finally {            //关闭文件流,释放资源            try {                fileInputStream.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }

2、使用 read(byte[] b) 进行优化

public void readFile02(){        //文件路径        String filePath = "d:\\hello.txt";        //首先定义一个字节数组        byte[] buf = new byte[8]; //一次性读取8个字节        //读取长度        int readLength = 0;        //初始化FileInputStream ,置为空        FileInputStream fileInputStream = null;        try {            //创建FileInputStream 对象,用于读取 文件            fileInputStream = new FileInputStream(filePath);            //从该输入流读取最多b.length字节的数据到字节数组。如果没有输入可用,此方法将被阻止            //如果返回-1,表示读取完毕            //如果读取正常,返回实际读取的字节数            while((readLength = fileInputStream.read(buf)) != -1){                System.out.print(new String(buf , 0 , readLength));//显示            }        } catch (IOException e) {            e.printStackTrace();        }finally {            //关闭文件流,释放资源            try {                fileInputStream.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }

二、FileOutputStream 文件输出流

1、创建方式:  (1)new FileOutputStream(filePath) 的创建方式,当写入内容是会覆盖原来的内容   (2)new FileOutputStream(filePath,true) 的创建方式,当写入内容是,追加到到文件的尾部,不会覆盖2、代码示例:
public void writeFile(){        //创建FileOutputStream 对象        String filePath = "d:\\a.txt";        FileOutputStream fileOutputStream = null;        try {            //得到FileOutputStream 对象            fileOutputStream = new FileOutputStream(filePath);            //写入一个字节            fileOutputStream.write('H');//char 和 int 之间可以自动转换            //写入字符串            String str = "hello,world";            //str.getBytes() 可以把 字符串 -> 字节数组            fileOutputStream.write(str.getBytes());            //write(byte[] b,int off,int len) ,将len 字节从位于偏移量off指定字节数组写入            fileOutputStream.write(str.getBytes(),0,str.length());        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                fileOutputStream.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }

3、文件拷贝代码示例

public class FileCopy {    public static void main(String[] args) {        //将d:\\by.png 拷贝到 d:\\bycopy.png                //源文件路径        String srcFilePath = "d:\\by.png";        //新文件路径        String destFilePath = "d:\\bycopy.png";                //初始化FileInputStream 输入流        FileInputStream fileInputStream = null;        //初始化FileOutputStream 输出流        FileOutputStream fileOutputStream = null;        try {            //获取输入流对象            fileInputStream = new FileInputStream(srcFilePath);            //获取输出流对象            fileOutputStream = new FileOutputStream(destFilePath);            //定义一个字节数组,提高效率            byte[] buf = new byte[1024];            //获取数组长度            int readLen = 0;            while ((readLen = fileInputStream.read(buf)) != -1){                //读取到后,就写入到文件 通过 fileOutputStream ,即边读边写                fileOutputStream.write(buf,0,readLen); //一定要使用这个方法            }            System.out.println("拷贝成功");        } catch (IOException e) {            e.printStackTrace();        }finally {            //输入流和输出流都要关闭            try {                if (fileInputStream != null){                    fileInputStream.close();                }                if (fileOutputStream != null){                    fileOutputStream.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }

三、FileReader 字符流

1、相关方法:

方法功能
new FilleReader(File/String)创建对象
read( )每次读取单个字节,返回该字符,如果到文件末尾返回-1
read( char[] )批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾,则返回-1
new String( char[] )将 char[ ] 转换成String
new String(char[] , off, len)将 char[] 的指定部分转换成String

2、代码示例:单个字符进行读取

    public void readFile01(){        //文件路径        String filePath = "d:\\story.txt";        //初始化对象        FileReader fileReader = null;        //接收单个字节        int data = 0;        try {            //1、创建一个FileReader 对象            fileReader = new FileReader(filePath);            //循环读取,使用read ,单个字符读取            while ((data = fileReader.read()) != -1){                System.out.print((char) data);            }        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                fileReader.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }

3、代码示例:字符数组进行读取

    public void readFile02(){        //文件路径        String filePath = "d:\\story.txt";        //初始化对象        FileReader fileReader = null;                //字符长度        int readLen = 0;        //创建数组        char[] buf = new char[8];        try {            //1、创建一个FileReader 对象            fileReader = new FileReader(filePath);            //循环读取,使用read(buf) ,返回的是实际读取到的字符数            //如果返回-1,说明文件结束            while ((readLen = fileReader.read(buf)) != -1){                System.out.print(new String(buf,0,readLen));            }        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                fileReader.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }

四、FileWriter 字符流

1、相关方法

方法功能
new FileWriter(File/String)覆盖模式,相当于流的指针在首端
new FileWriter(File/String , true)追加模式,相当于流的指针在尾端
write(int a)写入单个字符
write(char[] )写入指定数组
write(char[] , off , len)写入指定数组的指定部分
write (string b)写入整个字符串
write(string , off , len)写入字符串的指定部分

2、代码示例

public class FileWriter_ {    public static void main(String[] args) {        //文件路径        String filePath = "d:\\note.txt";        //创建FileWriter 对象        FileWriter fileWriter = null;                char[] chars = {'a','b','c'};        try {            //获取对象            fileWriter = new FileWriter(filePath);//默认是覆盖写入            //write(int):写入单个字符            fileWriter.write('H');            //write(char[]): 写入指定数组            fileWriter.write(chars);            //write(char[] ,off,len) : 写入指定数组的指定部分            fileWriter.write(chars , 0 , 2);            fileWriter.write("努力学习".toCharArray(), 0 , 2);            //write(String) : 写入整个字符串            fileWriter.write("努力学习");            //write(String,off,len) : 写入字符串的指定部分            fileWriter.write("继续加油", 0 , 2);        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                //必须要关闭流,否则无法写入                //fileWriter.flush();                fileWriter.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }