IO流分类和使用方式

字节流与字符流

在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。

IO操作属于资源操作,一定要记得关闭

bufferedreader读者缓冲区

package xdl.day18;

import java.io.*;

public class TestBufferedReader {

    public static void main(String[] args) {

        try{
            //1.创建BufferedReader类型的对象并关联到指定的文件
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(new FileInputStream("c:/a.txt")));

            //2.读取文件中的内容并打印
            String str = br.readLine();
            System.out.println("读取到的数据内容是:" + str);//hello

            //3.关闭流对象并释放相关的资源
            br.close();
        }catch(Exception e){
            e.printStackTrace();
        }

    }

}

DataInputStream数据输入流

package xdl.day18;

import java.io.*;

public class TestDataInputStream {

    public static void main(String[] args) {

        try{
            //1.创建DataInputStream类型的对象与指定的文件关联
            DataInputStream dis = 
                    new DataInputStream(new FileInputStream("c:/a.txt"));

            //2.读取文件中的整数值并打印出来
            int res = dis.readInt();
            System.out.println("读取到的整数是:" + res); //66

            //3.关闭流对象并释放相关的资源
            dis.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

复制粘贴

package xdl.day18;

import java.io.*;

public class TestFileCopy {

    public static void main(String[] args) {

        try{
            //1.创建FileInputStream类型的对象与指定的源文件进行关联
            FileInputStream fis = new FileInputStream("c:/javaseday16-IO流常用的类-06.wmv");

            //2.创建FileOutputStream类型的对象与指定的目标文件进行关联
            FileOutputStream fos = new FileOutputStream("c:/javaseday16-IO流常用的类-07.wmv");

            //3.不断地读取源文件中的内容并写入到目标文件中
            /* a.每次读取一个字节并写入目标文件
            int res = 0;
            while( (res = fis.read()) != -1){
                fos.write(res);
            }
            */
            // b.准备一个缓冲区,一次性将整个文件中的内容都读取出来
            // 当一个.avi的电影大小是10G时 该方式就不太靠谱了
            /*
            byte[] data = new byte[fis.available()];
            int res = fis.read(data);
            System.out.println("res = " + res);
            fos.write(data);
            */
            //3.准备一个合理的缓冲区,以该缓冲区为单位进行读取,通常都是1024倍数
            byte[] data = new byte[1024 * 8];
            int res = 0;
            while((res = fis.read(data)) != -1){
                fos.write(data, 0, res);
            }
            System.out.println("文件拷贝成功!");

            //4.关闭相关的流对象并释放资源
            fis.close();
            fos.close();

        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

输出文本内容

package xdl.day18;

import java.io.FileOutputStream;

public class TestFileOutputStream {

    public static void main(String[] args) {

        try{
            //1.创建FileOutputStream类型的对象与指定的文件关联
            //若文件存在则清空文件中的原有内容
            //若文件不存在则创建一个新的空文件
            FileOutputStream fos = new FileOutputStream("c:/a.txt");
            //若文件存在则以追加的方式建立关联,保留文件之前的内容
            //若文件不存在则创建一个新的空文件
            //FileOutputStream fos = new FileOutputStream("c:/a.txt", true);
            //2.向文件中写入数据内容,写入一个字节后则光标指向下一个位置
            fos.write(97); //97就是a的ASCII   
            fos.write(98); //98就是b的ASCII
            fos.write(99); //99就是c的ASCII
            fos.write("hello".getBytes());
            System.out.println("写入数据成功!");
            //3.关闭输出流对象并释放相关的资源
            fos.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

你可能感兴趣的:(IO流分类和使用方式)