【Java】第三十七节 IO流之节点流

节点流,或称文件流,是指直接连接程序与本地文件/网络数据的流,用于在程序直接操作数据。节点流包括:FileReader、FileWriter、FileInputStream和FileOutputStream。

字符流:FileReader和FileWriter:

FileReader的常用方法:

1、int read():返回的是字符对应的int类型的ASCII码,要在控制台打印的话强制转换为char,如果读到文件末尾了,返回值为-1;
2、int read(char [] data):返回的是读取到的字符个数,读取到的字符存储在了data数组中,可以遍历输出,但是要注意遍历的次数要与该方法的返回值相等,否则最后打印的结果会有问题;
3、int read(char [] c, int off, int len):返回的是读取到的字符个数,将读取到的字符从off位置开始的len个字符存储在了data数组中,可以遍历输出,但是要注意遍历的次数要与该方法的返回值相等,否则最后打印的结果会有问题;
4、public void close() throws IOException:JVM不会自动关闭流的连接,所以一定要要注意关闭资源!

FileWriter的常用方法:

1、void write(int c) 写入单个字符;
2、void write(char[] cbuf) 写入字符数组;
3、void write(char[] cbuf,int off,int len) 写入字符数组的某一部分。从off开始,写入len个字符;
4、 void write(String str) 写入字符串;
5、void write(String str,int off,int len) 写入字符串的某一部分;
6、public void close() throws IOException:JVM不会自动关闭流的连接,所以一定要要注意关闭资源!
7、FileWriter(File file, boolean flag):flag如果不传参或传false则为覆盖,如果传true则为追加。

例:拷贝文本文件

测试文件,本项目下的“Hello.txt”:

张伟:123...
You have no ball!

测试类:

package cn.jingpengchong.io;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test {
    public static void main(String[] args) {
        //1、创建File类对象
        File srcfile = new File("Hello.txt");
        File desfile = new File("Hello-copy.txt");
        //2、创建FileReader/FileWriter类对象
        FileReader reader = null;
        FileWriter writer = null;
        try {
            reader = new FileReader(srcfile);
            writer = new FileWriter(desfile);
            char[] data = new char[5];  //指定一次读取多少个字符
            //3、读入与写出操作
            int read = reader.read(data);
            while (read != -1){
                writer.write(data,0,read);
                //在控制台查看
                for (int i = 0; i < read; i++) {
                    System.out.print(data[i]);
                }
                read = reader.read(data);
            }
            System.out.println("\n复制成功!!!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        	//4、关闭资源
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(writer != null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

运行结果如下:
在这里插入图片描述
本项目下的出现“Hello-copy.txt”文件:
在这里插入图片描述

字节流:FileInputStream和FileOutputStream:

FileInputStream的常用方法:

1、int read():从输入流中读取数据的下一个字节。如果因为已经到达流末尾而没有可用的字节,则返回值 -1;
2、int read(byte[] data):从此输入流中将最多 data.length 个字节的数据读入一个 byte 数组中。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。否则以整数形式返回实际读取的字节数;
3、int read(byte[] c, int off, int len):将输入流中最多len个数据字节读入 byte 数组,如果因为已经到达流末尾而没有可用的字节,则返回值 -1。否则以整数形式返回实际读取的字节数;
4、public void close() throws IOException:JVM不会自动关闭流的连接,所以一定要要注意关闭资源!

FileOutputStream的常用方法:

1、void write(int b) 写入单个字节;
2、void write(byte[] cbuf) 写入字节数组;
3、void write(byte[] cbuf,int off,int len) 写入字节数组的某一部分。从off开始,写入len个字节;
4、public void close() throws IOException:JVM不会自动关闭流的连接,所以一定要要注意关闭资源!

例:拷贝桌面上的“01-视频.avi”视频文件到“02-视频.avi”,并计时
package cn.jingpengchong.io;

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

public class Test {
    public static void main(String[] args) {
        //1、创建File类对象
        File srcfile = new File("C:\\Users\\lenovo\\Desktop\\01-视频.avi");
        File desfile = new File("C:\\Users\\lenovo\\Desktop\\02-视频.avi");
        //2、创建FileReader/FileWriter类对象
        FileInputStream reader = null;
        FileOutputStream writer = null;
        try {
            reader = new FileInputStream(srcfile);
            writer = new FileOutputStream(desfile);
            byte[] data = new byte[1024];
            //3、读入与写出操作
            long start = System.currentTimeMillis();
            int read = reader.read(data);
            while (read != -1){
                writer.write(data,0,read);
                read = reader.read(data);
            }
            long end = System.currentTimeMillis();
            System.out.println("复制成功!!!用时(毫秒):"+(end-start));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        	//4、关闭资源
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(writer != null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

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

发布了128 篇原创文章 · 获赞 17 · 访问量 2744

猜你喜欢

转载自blog.csdn.net/qq_43705275/article/details/103988882