JAVA中的IO流-字节流-FileOutputStream类 与 FileInputStream类

FileOutputStream: 属于写入字节流
FileInputStream: 属于读取字符流

FileOutputStream的方法和FileWriter的方法基本上大同小异,不过前者是以字节流的形式写入,后者以字符流的形式写入.

FileInputStream的方法和FileReader的方法基本上大同小异,不过前者是以字节流的形式读取,后者以字符流的形式写入.

FileInputStream 有个特殊的方法…能获取字节的长度…available();


FileOutputStream例子:

import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
    public static void main(String[] args) throws IOException{
        FileOutputStream fos = new FileOutputStream("bytedemo.txt");
        fos.write("abcde".getBytes());
        fos.close();
    }
}

String类的方法getBytes() 将字符串转换成字符编码

运行结果bytedemo.txt文本文件,存入abcde




FileInputStream例子(1):

import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
    public static void main(String[] args) throws IOException{
        FileInputStream fis = new FileInputStream("bytedemo.txt");
        int ch;
        ch = fis.read();
        System.out.println((char)ch);
		
		fis.close();
    }
}

读取bytedemo.txt文本文件一个字节流**
运行结果:
在这里插入图片描述


FileInputStream例子(2):
如果想要读取文本文件全部的内容
使用循环

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

        FileInputStream fis = new FileInputStream("bytedemo.txt");

        int len = 0;

        while ((len = fis.read()) != -1) {
            System.out.print((char) len);
        }

        fis.close();
    }
}

运行结果:
在这里插入图片描述


FileInputStream例子(3):
使用自己创建缓冲区的字节流来读取
使用缓冲区速度会相对变快

import java.io.FileInputStream;
import java.io.IOException;

public class Demo {
    private static final int BYTE_SIZE = 1024; //定义字节流缓冲区大小
    public static void main(String[] args)  throws IOException{
        FileInputStream fis = new FileInputStream("bytedemo.txt");
        byte[] buf= new byte[BYTE_SIZE];
        int len = 0;
        while((len = fis.read(buf)) != -1) {
            System.out.print(new String(buf,0,len));
        }
		fis.close();
    }
}

运行结果:
在这里插入图片描述


FileInputStream例子(4)
演示avialable()方法

import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
    public static void main(String[] args) throws IOException{
        FileInputStream fis = new FileInputStream("bytedemo.txt");
        int len = 0;
        len = fis.available();
        System.out.println(len);
    }
}

运行结果: 5

文件里查看属性
在这里插入图片描述


可能有人想用available()方法可以获取大小来定义byte[ ]数组的大小…

import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
    public static void main(String[] args) throws IOException{
        FileInputStream fis = new FileInputStream("bytedemo.txt");
        byte[] buf = new byte[fis.available()];
    }
}

但是这种方法要慎用…因为如果这个流并不是文本文件而是视频文件…
文件大…创建数组的时间就要很久了…或者如果文件太大…那么数组还有溢出的风险…会抛出异常.




FileOutputStream 与 FileInputStream 例子:
复制一个Mp3文件
在D盘目录放有一个0.mp3的文件,现在将它复制到F盘中

import java.io.*;

public class Demo {
    private static int BYTE_SIZE = 1024;
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("D:\\0.mp3");
        FileOutputStream fos = new FileOutputStream("F:\\test.mp3");
        int len = 0;
        byte[] buf = new byte[BYTE_SIZE];
        while((len = fis.read(buf)) != -1) {
            fos.write(buf, 0, len);
        }

        fis.close();
        fos.close();
    }
}

运行结果:
在这里插入图片描述

发布了87 篇原创文章 · 获赞 43 · 访问量 3999

猜你喜欢

转载自blog.csdn.net/weixin_42947972/article/details/103448279