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

缓存区流底层代码:

                                                                                               


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


相关文章
|
19天前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
90 2
|
1天前
|
存储 缓存 Java
Java零基础入门之IO流详解(二)
Java零基础入门之IO流详解(二)
|
6天前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
【6月更文挑战第26天】Java IO流涵盖字节流和字符流,字节流处理二进制数据,如图像,由InputStream/OutputStream家族管理;字符流处理文本,基于Reader/Writer,适于文本文件。在文件复制示例中,字节流用FileInputStream/FileOutputStream,字符流用FileReader/FileWriter。选择流类型取决于数据类型和处理需求,文本文件优选字符流,二进制数据则选字节流。
|
6天前
|
安全 Java
|
5天前
|
存储 Java
杭州 java IO流详解(借鉴-侵-删)
杭州 java IO流详解(借鉴-侵-删)
10 0
|
6天前
|
Java 数据处理 开发者
Java IO流专家级教程:深入理解InputStream/OutputStream和Reader/Writer的内部机制
【6月更文挑战第26天】Java IO流涉及字节流(InputStream/OutputStream)和字符流(Reader/Writer),用于高效处理数据输入输出。InputStream/OutputStream处理二进制数据,常使用缓冲提升性能;Reader/Writer处理文本,关注字符编码转换。两者都有阻塞IO操作,但Java NIO支持非阻塞。示例代码展示了如何使用FileInputStream/FileOutputStream和FileReader/FileWriter读写文件。理解这些流的内部机制有助于优化代码性能。
|
6天前
|
存储 自然语言处理 Java
Java IO流完全手册:字节流和字符流的常见应用场景分析!
【6月更文挑战第26天】Java IO流涵盖字节流和字符流,字节流用于二进制文件读写及网络通信,如图片和音频处理;字符流适用于文本文件操作,支持多语言编码,确保文本正确性。在处理数据时,根据内容类型选择合适的流至关重要。
|
6天前
|
Java 开发者
Java IO流实战技巧:如何优化InputStream/OutputStream和Reader/Writer的使用?
【6月更文挑战第26天】Java IO流优化涉及缓冲、资源管理、字符编码和流式处理。使用Buffered流提高读写效率,如`BufferedInputStream`和`BufferedReader`。确保资源关闭使用try-with-resources,如`try (InputStream is = ...) {...}`。处理文本时指定编码,如`InputStreamReader(is, StandardCharsets.UTF_8)`防止乱码。流式处理大文件,分块读写避免内存溢出,以减少内存占用。这些技巧能提升程序性能和健壮性。
|
6天前
|
自然语言处理 Java
Java IO流进阶教程:掌握字节流和字符流的高级用法!
【6月更文挑战第26天】Java IO流助你高效交换数据,包括字节流(InputStream/OutputStream)和字符流(Reader/Writer)的高级技巧。缓冲流(Buffered*)提升读写性能,对象流(Object*Stream)支持对象序列化。字符流的BufferedReader/BufferedWriter优化文本处理,注意字符集如UTF-8用于编码转换。掌握这些,优化IO操作,提升代码质量。
|
6天前
|
Java
Java IO流终极指南:从InputStream/OutputStream到Reader/Writer的全面解读
【6月更文挑战第26天】Java IO流涵盖字节流(InputStream/OutputStream)和字符流(Reader/Writer),前者处理二进制数据,后者专司文本。例如,FileInputStream/FileOutputStream用于文件的字节级读写,而FileReader/FileWriter处理字符级文本。Buffered流提供缓冲功能,提升效率。选择合适的流类取决于数据类型和性能需求。