63.【Java I/O 操作】(一)

简介: 63.【Java I/O 操作】

(一)、基础知识

1.什么是IO?

IO是输入input输出output的首字母缩写形式,直观意思是计算机输入输出,它描述的是计算机的数据流动的过程,因此IO第一大特征是有数据的流动;另外,对于一次IO,它究竟是输入还是输出,是针对不同的主体而言的,不同的主体有不同的描述。例如,甲乙两人交谈,甲将大脑中的想法通过声带震动,继而通过声波传入乙的耳朵,乙通过耳膜的震动再由神经将信号解析到大脑,这个数据流动的过程对甲而言是输出,对乙而言是输入。

2.什么是流?

(1).概念:内存与储存设备之间传输数据的通道

eg: 
我们的程序存储在内存中,我们的文件存储在硬盘中
水库: 数据 
输水的管道: 相当于流
接水池: 流入/流出
水借助管道进行流入/流出  
数据借助流进行传入/传出

3.流的分类

(1).按照流的方向

输入流: 将硬盘中的数据读入到内存中

输出流: 将内存中的数据输出到硬盘中

(2).按单位:

字节流以字节为单位,可以读写所有数据

字符流:以字符为单位,只能读写文本数据

(3).按功能划分:

节点流 :具有实际传输数据的读写功能

过滤流 :在节点流的基础之上增强功能

(二).文件字节流(FileInputStream与FileOutStream)

4.字节流的父类(抽象类)

InputStream :  字节输入流
(1).  public int read(){}  从输入流读取数据的下一个字节。
OutputStream : 字节输出流
(1). public void write(){}  将指定的字节写入此输出流。

5.文件字节流(输入流)

FieInputStream :    文件输入流
(1). public int read(byte[] b)  从流中读取多个字节,将读到的内容存入
  b数组,返回实际读到的字节数;如果达到文件的尾部返回-1
FileOutputStream :   文件输出流
(1).public void write(byte []b)  一次写多个字节,将b数组中的所有字节,写入输出流.

基本思路:

public int read(){} 单个单个的读取

1.创建文件输入流,

2.读取文件,因为读的操作(如果文件的下一个为空,那么返回-1)

3.打印读取的文件信息

4.一定要关闭文件的流操作

import java.io.FileInputStream;
public class Demo0 {
    public static void main(String[] args) throws Exception{
        //1.创建文件输入流 ,并且指定文件路径
          FileInputStream fileInputStream_one=new FileInputStream("e:\\123.txt");
        //2.读取文件
        int date=0;
        while ((date=fileInputStream_one.read())!=-1){
            System.out.print((char)date);
        }
                    fileInputStream_one.close();
        }
    }

基本思路:

1.利用byte数组 一次性储存数据

2.利用new String() 函数,实现以字符串的形式进行输出

3.read() 返回的类型是int ,单个返回指的是ascll码,如果是byte 那么返回的是读取的个数.

import java.io.FileInputStream;
public class Demo0 {
    public static void main(String[] args) throws Exception{
        //1.创建文件输入流 ,并且指定文件路径
          FileInputStream fileInputStream_one=new FileInputStream("e:\\123.txt");
        //2.读取文件
        byte date[]=new byte[4];
        int count=fileInputStream_one.read(date);
        System.out.println(fileInputStream_one.read());
        System.out.println(new String(date));
        System.out.println("个数为:"+count);
         fileInputStream_one.close();
        }
    }

二次读取操作

import java.io.FileInputStream;
public class Demo0 {
    public static void main(String[] args) throws Exception{
        //1.创建文件输入流 ,并且指定文件路径
          FileInputStream fileInputStream_one=new FileInputStream("e:\\123.txt");
        //2.读取文件
        byte date[]=new byte[3];
        //第一次读取
        int count=fileInputStream_one.read(date);
        System.out.println(new String(date));
        System.out.println("个数为:"+count);
        //第二次读取
        int count1=fileInputStream_one.read(date);
        System.out.println(new String(date));
         fileInputStream_one.close();
        }
    }

byte[]数组的

import java.io.FileInputStream;
public class Demo0 {
    public static void main(String[] args) throws Exception{
        //1.创建文件输入流 ,并且指定文件路径
          FileInputStream fileInputStream_one=new FileInputStream("e:\\123.txt");
        //2.读取文件
        byte date[]=new byte[3];
        int count=0;
        while ((count=fileInputStream_one.read(date))!=-1){
            System.out.println(new String(date));
        }
         fileInputStream_one.close();
        }
    }

6.文件字节流 (输出流)

基本思路:
1.FileOutputStream 输出流
2.write 写的操作
import java.io.FileOutputStream;
public class Demo1 {
    public static void main(String[] args) throws Exception{
        //1.创建文件的输出流
        FileOutputStream fileOutputStream_one=new FileOutputStream("e://123.txt");
    /*
        //2.写文件
        fileOutputStream_one.write(97);
        fileOutputStream_one.write('b');
        fileOutputStream_one.write(99);
        */
        String string="hello word";
        fileOutputStream_one.write(string.getBytes());
        //3.关闭文件
        fileOutputStream_one.close();
        System.out.println("项目执行完毕!");
    }
}

7.文件字节流复制文件

基本思路:
1.首先先从文件中读取数据
2.然后开始使用文件写入数据
3.1024个字节等于1kb,假如说字节数写少了,那么读取的文件会不完整。
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Demo0 {
    public static void main(String[] args) throws Exception{
        //1.创建文件输入流 ,并且指定文件路径
          FileInputStream fileInputStream_one=new FileInputStream("E:\\美化图片\\123.jpg");
          FileOutputStream fileOutputStream_one=new FileOutputStream("E:\\美化图片\\13.jpg");
       //2.边读边写
            byte []buf=new byte[1024];
            int count=0;
            //每次都读取1024个字节
            while ((count=fileInputStream_one.read(buf))!=-1){
              //截取具体化
                fileOutputStream_one.write(buf,0,count);
            }
         fileInputStream_one.close();
         fileOutputStream_one.close();
        System.out.println("项目完毕!");
        }
    }

(三)、字节缓冲流(BufferedOutputStream)

8.字节缓冲流(输入流)

缓冲流: BufferedInputStream/BufferedOutputStream
1.提高IO效率,减少访问磁盘的次数
2.数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close.
3.在使用的过程中,会创建一个缓冲区.用于数据的缓存
基本思路:
1.创建文件流,先获取文件()
2.把文件放入缓冲区中去
3.利用缓冲区进行访问文件
(相当于一次性就把文件放入到缓冲区,就访问了一哈硬盘)
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Demo3 {
    public static void main(String[] args) throws Exception {
        //1.创建一个输入流
        FileInputStream fileInputStream=new FileInputStream("e://123.txt");
        //2.创建一个缓冲流,并且把文件写入到缓冲区
        BufferedInputStream bufferedInputStream=new BufferedInputStream(fileInputStream);
        //3.读取数据
        int count=0;
        while ((count=fileInputStream.read())!=-1){
            System.out.println((char)count);
        }
        fileInputStream.close();
        bufferedInputStream.close();
    }
}


相关文章
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
5月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
6月前
|
存储 Java
java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)
java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)
246 0
|
5月前
|
存储 缓存 Oracle
可能是最漂亮的Java I/O流详解
大家有什么思路吗?评论区一起讨论讨论。我需要使用 Java 逐行读取大约 5-6 GB 的大型文本文件。我怎样才能快速完成此操作?最高赞的回答是叫Peter Lawrey的老哥回答的。大家好,我是南哥。一个Java学习与进阶的领路人,今天指南的是Java I/O流,跟着南哥我们一起在Java之路上成长。本文收录在我开源的《Java学习进阶指南》中,涵盖了想要学习Java、成为更好的Java选手都在偷偷看的核心知识、面试重点。
129 1
可能是最漂亮的Java I/O流详解
|
5月前
|
存储 Java 索引
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
61 4
|
5月前
|
Java Linux
Java演进问题之1:1线程模型对于I/O密集型任务如何解决
Java演进问题之1:1线程模型对于I/O密集型任务如何解决
|
5月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
5月前
|
Java API 开发者
Java中的文件I/O操作详解
Java中的文件I/O操作详解
|
5月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作