java中的io流——字节流

喜你入骨 提交于 2019-12-24 01:43:52

io流概述

  • Java中对数据的操作都是通过流的方式。
  • Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作。
  • Java用于操作流的类都在io包中。

流的分类

  • 流按照处理数据类型的单位的不同可以分为字节流字符流
  • 流按照流向数据流向的不同可以分为输入流输出流
  • 字节流:FileInputStreamFileOutputStream是java中可以按照最小字节单位读取的流,即每次读写一个字节,字节流是直接连接到输入源的流。
  • 字符流:InputStreamReaderOutputStreamWriter是以字符为单位进行数据处理的IO流。本质其实就是基于字节流读取时,去查找指定的码表。字符流是为了方便中文的操作而来的。
  • 只要是纯文本数据优先使用字符流,除此之外都使用字节流。

字节流

传输的数据单位是字节,也意味着字节流能够处理任何一种文件。

FileInputStream常用方法

FileInputStream(String filename)
FileInputStream(File file)
int read() 注意这里返回值的类型是int,指读取的内容
int read(byte[] buf) 读取内容填充到buf中,返回读取的长度
close()

FileInputStream应用实例:读取文件内容
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Read
{
    public static void main(String[] args)
    {
        Read a1=new Read();

        // 电脑e盘中的hello.txt 文档
        String filePath="e:/hello.txt";
        String reslut=a1.readFile(filePath);
        System.out.println(reslut);
    }

   
    public String readFile(String filePath)
    {
        FileInputStream fis=null;
        String result="";
        try
        {
            // 1. 根据path路径实例化一个输入流的对象
            fis=new FileInputStream(filePath);

            // 2. 返回这个输入流中可以被读的剩下的bytes字节的估计值;
            int size=fis.available();
            // 3. 根据输入流中的字节数创建byte数组;
            byte[] array=new byte[size];
            // 4.把数据读取到数组中;
            fis.read(array);

            // 5.根据获取到的Byte数组新建一个字符串,然后输出;
            result=new String(array);

        }
        catch(FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if(fis != null)
            {
                try
                {
                    fis.close();
                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }
            }
        }

        return result;
    }

}

在这里插入图片描述
如果文件不存在,会报java.io.FileNotFoundException

FileOutputStream常用方法

FileOutputStream(String path)
FileOutputStream(File file)
close()
void write(int v)
void write(byte[] bs)
void write(byte[] bs, int off, int len)

FileOutputStream应用实例:将内容写入文件
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Write
{
    public static void main(String[] args)
    {
        Write a2=new Write();

        // 电脑e盘中的diary.txt 文档
        String filePath="e:/diary.txt";

        // 要写入的内容
        String content="12月23日  霾  yww答应我给我从他家带两个糖";
        a2.writeFile(filePath, content);

        System.out.println("文件写入成功");
    }

    public void writeFile(String filePath, String content)
    {
        FileOutputStream fos=null;
        try
        {
            // 1、根据文件路径创建输出流
            fos=new FileOutputStream(filePath);

            // 2、把string转换为byte数组;
            byte[] array=content.getBytes();
            // 3、把byte数组输出;
            fos.write(array);

        }
        catch(FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if(fos != null)
            {
                try
                {
                    fos.close();
                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }

}

在这里插入图片描述
如果文件不存在,会新建一个文件。

实例三 ——复制文件(可以复制各种类型的文件,包括图片、视频、音频、exe文件)

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

public class Copy
{
    public static void main(String[] args)
    {
        Copy a3=new Copy();

        String filePath1="E:\\copy\\原位置\\video.mp4";

        String filePath2="E:\\copy\\新位置\\video.mp4";

        // 复制文件
        a3.copyFile(filePath1, filePath2);
        System.out.println("文件复制成功!");
    }

    public void copyFile(String filePath_old, String filePath_new)
    {
        FileInputStream fis=null;
        FileOutputStream fout=null;
        try
        {
            // 根据path路径实例化一个输入流的对象
            fis=new FileInputStream(filePath_old);

            // 2. 返回这个输入流中可以被读的剩下的bytes字节的估计值;
            int size=fis.available();
            // 3. 根据输入流中的字节数创建byte数组;
            byte[] array=new byte[size];
            // 4.把数据读取到数组中;
            fis.read(array);

            // 5、根据文件路径创建输出流
            fout=new FileOutputStream(filePath_new);

            // 5、把byte数组输出;
            fout.write(array);

        }
        catch(FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if(fis != null)
            {
                try
                {
                    fis.close();
                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }
            }
            if(fout != null)
            {
                try
                {
                    fout.close();
                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }

}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!