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

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

                                   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();
    }

缓存区流底层代码:

                                                                                               


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


相关文章
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
1月前
|
Java
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
51 9
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
92 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
|
2月前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
45 1
|
2月前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
110 1
|
3月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
249 12
|
2月前
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
66 0
|
2月前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
42 0
|
3月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践