Java零基础入门之IO流详解(一)

目录

                                   File类

                                  输入及输出的概念

                                  输入流与输出流

                                  输入输出节点字节流

                                  字节流与字符流

                                  节点流与处理流


                                    File类

 •  一个File类的对象可以表示一个具体的文件目录 

 •  File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等.

 •  File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作.

//指明详细的路径以及文件名,请注意双斜线或用反斜杠
File f1 = new File("E:/IO.txt");//表示IO.txt文件
//指明详细的路径以及目录名,请注意双斜线
File f2 = new File("E:\\Java");//表示Java目录
//创建多级目录(文件夹)
        File f =new File("E:\\package\\package1\\package2\\package3");
        f.mkdirs();

○ File类的常用方法:

                                                                            ( delete删除一个文件夹时,文件夹中必须是空的 )

 ○ 代码展示:

 ●  我们首先在E盘中创建一个 IO.txt 文件

                                                                                                     ----(左下角显示文件为14字节

●  接下来让我们对其进行测试

 public static void main(String[] args) {

        File f1 = new File("E:/IO.txt");
        //判断该文件是否存在
        System.out.println(f1.canExecute());//true
        //是否可读
        System.out.println(f1.canRead());//true
        //是否可写
        System.out.println(f1.canWrite());//true
        //得到完整地址
        System.out.println(f1.getAbsolutePath());//E:\IO.txt
        //得到文件名
        System.out.println(f1.getName());//IO.txt
        //得到目录
        System.out.println(f1.getParent());//E:\
        //判断是否为目录
        System.out.println(f1.isDirectory());//false
        //是否为隐藏文件
        System.out.println(f1.isHidden());//false
        //文件创建时间
        System.out.println(f1.lastModified());//1710659923057
        System.out.println(new Date(1710639860957L));//[Sun Mar 17 09:41:02 CST 2024]
        //文件长度(字节)
        System.out.println(f1.length());//14
    }

    ( 我们可以在文件属性中对其更改再测试 )


                               输入及输出的概念

  输入和输出是一个相对概念,输入和输出是相对于我们的程序 

输入---Input

  • 把电脑硬盘上的数据读到程序中,称为输入,即input,进行数据的read操作

输出---Output

  • 从程序往外部设备写数据,称为输出,即output,进行数据的write操作


                                  输入流与输出流

  • java中把用于对文件输入和输出的类称为流.
  • 输入流:往程序中读叫输入流。
  • 输出流:从程序中往外写叫输出流。
  • InputStreamOutputStream的子类都是字节流, 可以读写二进制文件,主要处理音频、图片、歌曲;字节流处理单元为1个字节。

○ 首先们在D盘中创建一个ddd.docx文件(9.86KB),再在E盘中创建一个eee.docx文件(空)

 代码实现:

 public static void main(String[] args) throws IOException {
       
        FileInputStream inputStream1 =new FileInputStream("D:/ddd.docx");//输入流
        FileOutputStream outputStream1 =new FileOutputStream("E:/eee.docx");//输出流
        int a =0 ;
        while((a=inputStream1.read())!=-1){//只要a!=-1说明还未读完
            outputStream1.write(a);//写内容(以字节为单位)
        }
        //关闭通道,否则文件一直处于打开(占用)状态
        inputStream1.close();
        outputStream1.close();
    }

○ 运行程序,可以发现我们成功将ddd.docx文件内容写到了eee.docx文件中 ( 0字节➝9.86KB )

 注意:

   每次读写完后记得关闭通道,否则则文件一直处于打开(占用)状态.

○ 高效文件读写:

   创建一个byte数组,一次读byte数组长度个字节,便于提高读写效率。

public static void main(String[] args) throws IOException {
        FileInputStream inputStream =new FileInputStream("D:/demo1.txt");
        FileOutputStream outputStream=new FileOutputStream("E:/IO.txt");
        byte[] bytes =new byte[10];
        //read(bytes) 一次读byte数组长度个字节,文件内容读取完后返回-1
        //size:每次实际往数组中装入的元素的个数

        int size =0;
        while((size=inputStream.read(bytes))!=-1){
        //一次向外写出一个byte数组长度个字节内容,从指定位置开始写,写size个
            outputStream.write(bytes,0,size);
        }
        inputStream.close();
        outputStream.close();
    }

                               输入输出节点字节流

● InputStream的基本方法

  • 读取一个字节并以整数的形式返回(0~255),如果返回-1已到输入流的末尾。
  • int read() throws IOException
  • 读取一系列字节并存储到一个数组buffer, 返回实际读取的字节数,如果读取前已到输入流的末尾返回-1
  • int read(byte[] buffer) throws IOException
  • 关闭流释放内存资源
  • void close() throws IOException

OutputStream的基本方法

  • 向输出流中写入一个字节数据,该字节数据为参数b的低8位
  • void write(int b) throws IOException
  • 将一个字节类型的数组中的从指定位置(off)开始的 len个字节写入到输出流
  • void write(byte[] b, int off, int len) throws IOException
  • 关闭流释放内存资源
  • void close() throws IOException

我们把流按照数据的传输方向分为输入流和输出流;流也可以从数据编码格式上划分为字节流和字符流;根据封装类型不同流又分为节点流和处理流。

                                 字节流与字符流

○ 字节流:读取时以字节为单位,可以读取任意文件

○ 字符流:读取时以字符为单位,只能读取文本文件

字节流中常用类:

字节输入流  FileInputStream

字节输出流  FileOutputStream

字符流中常用类:

字符输入流  FileReader

字符输出流  FileWriter


  • InputStreamOutputStream的子类都是字节流 可以读写二进制文件,主要处理音频、图片、歌曲、字节流处理单元为1个字节。
  • ReaderWriter的子类都是字符流, 主要处理字符或字符串,字符流处理单元为1个字符。

                                 节点流与处理流

● 按封装类型,流又分为:

节点流:直接封装的是文件,数据.

处理流:封装的是其他节点流对象;可以提供缓冲功能,提高读写效率.

节点流中常用类:

字节输入流 FileInputStream

字节输出流 FileOutputStream

字符输入流 FileReader 

字符输出流 FileWriter

处理流中常用类:

缓冲字节输出流 BufferedOutputStream

缓冲字节输入流 BufferedInputStream

缓冲字符输入流 BufferedReader

缓冲字符输出流 BufferedWriter


 代码演示:

 public static void main(String[] args) throws IOException {
        FileInputStream inputStream = new FileInputStream("D:/demo1.txt");
        //封装的是一个节点流对象,可以提供缓冲功能,称为处理流/包装流
        BufferedInputStream bufferedInputStream =new BufferedInputStream(inputStream,20);
        FileOutputStream outputStream =new FileOutputStream("E:/IO.txt");
        BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(outputStream,20);

        int size =0;
        byte[] bytes =new byte[10];
        while ((size=bufferedInputStream.read(bytes))!=-1){
            bufferedOutputStream.write(bytes,0,size);
        }
        bufferedInputStream.close();
        bufferedOutputStream.close();
    }

 缓存区流底层代码:

                                                                                                   


                                                                                                对象输入输出流  会在(三)中讲到

                                                 

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值