java基础—IO流

Posted 2chun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础—IO流相关的知识,希望对你有一定的参考价值。

 

 

 一、字符流

读取文件

FileReader与BufferedReader区别:

https://blog.csdn.net/meihuai7538/article/details/75807624/

https://www.cnblogs.com/cookie1026/p/9703879.html

https://blog.csdn.net/tovegar/article/details/83455377

 

 

 

 

 

 

注: 第四行如果为空,则输出空,如果只有三行第四行没有内容,则输出null

 

另一种通过循环读取文件内容的方法:

 

bufferreader如何节约内存:例如上面循环读取文件内容方法,bufferreader每次只读取一行赋值给变量line,变量line保存到内存里,那么内存里只存储一行的数据,因此数据过多的时候不会撑爆内存。

 

 

写入文件

public static void writeCharactorFile() throws Exception{
        File file = new File("D:\\\\write.txt");
        FileWriter fileWriter = new FileWriter(file);
        //缓冲写入流
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        //写一个字符串
        //  \\n--》换行符
        String s = "hello \\n lemon \\n aaa bbb";
        //第一个参数:原始你要写的字符串  第二个参数:写入的位置  第三个参数:写的内容长度
        //方法重载
        //bufferedWriter.write(s,0,s.length());
        bufferedWriter.write(s);
        //流记得关闭,否则的话内容是写不进去
        bufferedWriter.close();

 

总结:
字符流
File文件对象-->FileReader读取 --> BufferReader缓冲读取(效率高)
File文件对象-->FileWriter写入 --> BufferWriter缓冲写入(效率高)

异常
1、编译型异常 --》需要我们手动去处理
(1)try...catch...代码块内部处理
(2)throws关键字 向外抛出异常
2、运行时异常 --> 数组越界、分母0

 

复制一个文件的内容到另一个文件中

import java.io.*;

public class CopyFile {
    public static void main(String[] args) throws Exception {
        String oriFilePath = "C:\\\\Users\\\\before.txt";
        String copyFilePath = "C:\\\\Users\\\\after.txt";
        copyFile(oriFilePath,copyFilePath);
    }

    public static void copyFile(String oriFilePath,String copyFilePath ) throws Exception {
        File oriFile = new File(oriFilePath);
        File copyFile = new File(copyFilePath);
        FileReader fileReader = new FileReader(oriFile);
        FileWriter fileWriter = new FileWriter(copyFile);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        String line;
        while ((line = bufferedReader.readLine()) != null){
            //写入每行内容,直接写入不会换行
            bufferedWriter.write(line);
            //换行
            bufferedWriter.newLine();

        }
        bufferedReader.close();
        bufferedWriter.close();
    }
}

 

 

 

二、字节流

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class IOTest {
    public static void main(String[] args) throws Exception {
        //copyByteFile();
        readFile();
    }

    /**
     * 读取字节文件-图片、视频、etc...
     */
    //用fileInputStream拷贝图片
    public static void copyByteFile() throws Exception {
        File sourceFile = new File("D:\\\\python27\\\\test.png");
        File targetFile = new File("D:\\\\python27\\\\lemon.png");
        //读取流
        FileInputStream fileInputStream = new FileInputStream(sourceFile);
        //写入流
        FileOutputStream fileOutputStream = new FileOutputStream(targetFile);
        //定义一维byte数组 1024 -->每一次读取1024个字节的数据到数组里面
        //数据载体
        byte[] arr = new byte[1024];

        //文件的大小很多情况下都是会超过1024个字节,所以我们要多次去进行读取
        //length标识每一次读取到的长度
        int length = 0;
        //-1表示已经到达文件末尾
        while ((length = fileInputStream.read(arr)) != -1){
            //写入到文件里面
            //第一个参数:数组 第二个参数:写入的起始位置 第三个参数:写入的长度
            fileOutputStream.write(arr,0,length);
        }
        //关闭流
        fileInputStream.close();
        fileOutputStream.close();
    }

    //用fileInputStream读取文本文件
    public static void readFile() throws Exception {
        File File = new File("D:\\\\python27\\\\python27.txt");
        FileInputStream fileInputStream = new FileInputStream(File);
        byte[] arr = new byte[1024];
        int length = 0;
        while((length=fileInputStream.read(arr)) != -1){
            //打印的是地址
            //System.out.println(arr);
            /*for(int i =0;i <length; i++){
                System.out.println(arr[i]);
            }*/
            //读取的内容转成String  把字节数组 转换为字符串
            String str = new String(arr);
            System.out.print(str);
        }
        //关闭流
        fileInputStream.close();

      
    }
}

 

字节流 字符流区别:
1、读取的文件类型不同 字符流:普通文本文件 字节流:针对任意文件
2、字符流读取--》字符 字节流 --》字节
3、字符流=缓冲流BufferReader/BufferWriter;  字节流=也有缓冲流但用的比较少

以上是关于java基础—IO流的主要内容,如果未能解决你的问题,请参考以下文章

Java IO流基础总结

Java : java基础 IO流

java基础之 IO 流(输入/出字符流)

Java基础总结IO流

java基础之 IO 流(RandomAccessFile类)

[Java基础]字符缓冲流