Java---IO流讲解(1)

文章目录

  • 1. File类
    • 1.1 File类概述和构造方法
    • 1.2 File类创建功能
    • 1.3 File类删除功能
  • 2. IO流
    • 2.1 IO流概述
    • 2.2 分类
  • 3 字节流
    • 3.1 字节流写数据
    • 3.2 字节流写数据的3种格式
    • 3.3 字节流写数据的两个小问题
    • 3.4 字节流写数据加异常处理
    • 3.5 字节流读数据
    • 3.6 字节缓冲流


1. File类

1.1 File类概述和构造方法

 1. File:它是文件和目录路径名的抽象表示,文件和目录是可以通过File封装成对象的。

 2. 构造方法:

方法名说明
File pathname通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
File(String parent, String child)从父路径名字符串和子路径名字符串创建新的File实例
File(File parent, String child)从父抽象路径名和子抽象路径名字符串来创建新的File实例
import java.io.File;

public class Demo {
    public static void main(String[] args) {
        File f1 = new File("D:\\123\\java.txt");
        System.out.println(f1); //D:\123\java.txt

        File f2 = new File("D:\\123","java.txt");
        System.out.println(f2); //D:\123\java.txt

        File f3 = new File("D:\\123");
        File f4 = new File(f3,"java.txt");
        System.out.println(f4); //D:\123\java.txt
    }
}

1.2 File类创建功能

方法名说明
public boolean createNewFile()当具有该名称的文件不存在时,创建一个由该抽象路径命名的新空文件
public boolean mkdir()创建由此抽象路径名命名的目录
public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
public class Demo {
    public static void main(String[] args) throws IOException {
        File f1 = new File("D:\\123\\java.txt");
        f1.createNewFile();

        File f2 = new File("D:\\123\\java");
        f2.mkdir();

        File f3 = new File("D:\\123\\java1\\java2");
        f3.mkdirs();
    }
}

在这里插入图片描述

1.3 File类删除功能

方法名说明
public boolean delete()删除由此抽象路径名表示的文件或目录
public class Demo {
    public static void main(String[] args) throws IOException {
        File f1 = new File("D:\\123\\java.txt");
        f1.createNewFile();

        File f2 = new File("D:\\123\\java");
        f2.mkdir();

        File f3 = new File("D:\\123\\java1\\java2");
        f3.mkdirs();

        f1.delete();
    }
}

在这里插入图片描述

2. IO流

2.1 IO流概述

 1. IO:输入和输出(Input/Output)。

 2. 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输成为流,流的本质是数据传输。

 3. IO流就是用来处理设备间传输问题的。常见的应用:文件复制、文件传输、文件下载。

在这里插入图片描述

2.2 分类

 1. 按照数据的流向:(1) 输入流:读数据。 (2) 输出流:写数据。

 2. 按照数据类型来分:(1) 字节流。 (2) 字符流。
 简单来说:如果数据在记事本上打开,我们能读懂里面的内容就使用字符流;反之使用字节流。

在这里插入图片描述

3 字节流

3.1 字节流写数据

 1. 字节流抽象类:

  • InputStream:这个抽象类是表示字节输入流的所有类的超类。
  • OutputStream:这个抽象类是表示字节输出流的所有类的超类。
  • 子类名特点:子类名称都是以其父类名作为子类名的后缀。

 2. FileOutputStream:文件输出流用于将数据写入File。步骤:(1) 创建字节输出流对象。 (2) 调用字节输出流对象。 (3) 释放资源。

import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
    public static void main(String[] args) throws IOException { //文件名注意加引号
        FileOutputStream f=new FileOutputStream("D:\\fos.txt");
        f.write(97);
        f.close();
    }
}

3.2 字节流写数据的3种格式

方法名说明
void write(int b)将指定的字节写入此文件输出流,一次写一个字节数据
void write(byte[] b)将b.length字节从指定的字节数组写入此文件输出流,一次写一个字节数组数据
void write(byte[] b, int off, int len)将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,一次写一个字节数组的部分数据
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException { //文件名注意加引号
        FileOutputStream f=new FileOutputStream("D:\\fos.txt");
        f.write(97);

        byte[] bys={98,99,100,101};
        f.write(bys);

        f.write(bys,1,3);
        f.close();
    }
}

在这里插入图片描述

3.3 字节流写数据的两个小问题

 1. 如何实现换行?写完数据后加换行符:f.write("\r\n".getBytes())

 2. 如何实现追加写入?创建文件时加第二个参数:true

import java.io.FileOutputStream;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException { //文件名注意加引号
        FileOutputStream f=new FileOutputStream("D:\\fos.txt",true);
        f.write(97);

        byte[] bys={98,99,100,101};
        f.write(bys);

        f.write("\r\n".getBytes());
        f.write(bys,1,3);
        f.close();
    }
}

在这里插入图片描述

3.4 字节流写数据加异常处理

 在前面展现的一些代码块中都是通过throws IOException完成的,也可以改成try...catch

import java.io.FileOutputStream;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) { //文件名注意加引号
        try {
            FileOutputStream f = new FileOutputStream("D:\\fos.txt", true);
            f.write(97);

            byte[] bys = {98, 99, 100, 101};
            f.write(bys);

            f.write("\r\n".getBytes());
            f.write(bys, 1, 3);
            f.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

3.5 字节流读数据

 1. FileInputStream:从文件系统中的文件获取输入字节。步骤:(1) 创建字节输入流对象。 (2) 调用字节输入流对象的读数据方法。 (3) 释放资源。

 2. 一次读一个字节数据的代码块:

在这里插入图片描述

import java.io.*;

public class Demo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("D:\\fos.txt");
        //第一次读数据
        int by=fis.read();
        System.out.println(by);//97
        System.out.println((char)by);//a
        //第二次读数据
        by=fis.read();
        System.out.println(by);//98
        System.out.println((char)by);//b
        fis.close();
    }
}

 优化读:

public class Demo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("D:\\fos.txt");
        int by;
        while((by=fis.read())!=-1){
            System.out.print((char)by);
            //不加ln,可以读取到换行
        }
    }
}

在这里插入图片描述
 3. 一次读一个字节数组数据的代码块:
在这里插入图片描述

import java.io.*;

public class Demo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("D:\\fos.txt");
        byte[] bys=new byte[5];
        int len= fis.read(bys);
        System.out.println(len);//5 表示读入的个数
        System.out.println(new String(bys,0,len));

        len= fis.read(bys);
        System.out.println(len);//5 表示读入的个数
        System.out.println(new String(bys,0,len));

        len= fis.read(bys);
        System.out.println(len);//5 表示读入的个数
        System.out.println(new String(bys,0,len));
        //hello\r\n
        //world\r\n
        fis.close();
    }
}

在这里插入图片描述

 优化读:

import java.io.*;

public class Demo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("D:\\fos.txt");
        byte[] bys=new byte[1024];//一般是1024整数倍
        int len;
        while((len= fis.read(bys))!=-1){
            System.out.print(new String(bys,0,len));
        }
        fis.close();
    }
}

在这里插入图片描述

3.6 字节缓冲流

 1. 字节缓冲流是为了提高读取和写入字节的效率,构造方法有两个:

  • 字节缓冲输出流:BufferedOutputStream(OutputStream out)
  • 字节缓冲输入流:BufferedInputStream(InputStream in)

 2. 为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?

  • 字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作。
import java.io.*;
public class Demo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos=new FileOutputStream("D:\\fos.txt");
        BufferedOutputStream bos=new BufferedOutputStream(fos);
        bos.write("hello\r\n".getBytes());
        bos.write("world\r\n".getBytes());
        bos.close();

        FileInputStream fis=new FileInputStream("D:\\fos.txt");
        BufferedInputStream bis=new BufferedInputStream(fis);

        //一次读取一个字节方式
        //int by;
        //while ((by=bis.read())!=-1){
        //    System.out.print((char)by);
        //}
        //bis.close();

        //一次读取一个字节数组方式
        byte[] by=new byte[1024];
        int len;
        while((len=bis.read(by))!=-1){
            System.out.print(new String(by,0,len));
        }
        bis.close();
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/267543.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【FPGA】分享一些FPGA协同MATLAB开发的书籍

在做FPGA工程师的这些年,买过好多书,也看过好多书,分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

62权限提升-烂土豆dll劫持引号路径服务权限

必备知识点:令牌窃取配合烂土豆提权, 单纯令牌窃取:web提权或者本地提权 如果配合烂土豆提权,就需要web权限和数据库权限。配合烂土豆的就用不了本地提权了, 烂土豆的原理, 他进行提权的时候用到的是关…

代码随想录算法训练营第四十三天|1049. 最后一块石头的重量 II、494. 目标和、474.一和零

代码随想录 (programmercarl.com) 1049. 最后一块石头的重量II 核心思路:将石头分成重量近似的两堆,与之前的416.分割等和子集问题很相似。 1.确定dp数组以及下标的含义 dp[j]表示容量为j的背包,最多可以背的最大重量为dp[j]。 其中&…

FPGA高端项目:UltraScale GTH + SDI 视频编解码,SDI无缓存回环输出,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale…

HFish蜜罐搭建及简单使用

一、HFish蜜罐 HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的…

零基础学人工智能:TensorFlow 入门例子

识别手写图片 因为这个例子是 TensorFlow 官方的例子,不会说的太详细,会加入了一点个人的理解,因为TensorFlow提供了各种工具和库,帮助开发人员构建和训练基于神经网络的模型。TensorFlow 中最重要的概念是张量(Tenso…

I Doc View在线文档预览系统 cmd.json RCE漏洞复现

0x01 产品简介 IDocView是一个在线文档解析应用,旨在提供便捷的文件查看和编辑服务。 0x02 漏洞概述 I Doc View在线文档预览系统 cmd.json 接口处存在命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。 0x03 影…

Linux入门基础知识

1. 什么是操作系统? 正式定义:负责管理计算机的硬件和软件资源,并合理的组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统的系统软件。 通俗定义:是一个系统软件…

【头歌系统数据库实验】实验11 SQL互联网业务查询-2

目录 第1关:查询某网站每个日期新用户的次日留存率 第2关:查询满足条件的用户 第3关:查询未完成订单率排名前三的用户 如果对你有帮助的话,不妨点赞收藏评论一下吧,爱你么么哒😘❤️❤️❤️ 第1关&…

matlab实践(十一):导弹追踪

1.题目 a9.94,x062.06 2.方程 我们有: ( d x d t ) 2 ( d y d t ) 2 w 2 (\frac{\mathrm d\mathrm x}{\mathrm d\mathrm t})^2(\frac{\mathrm d\mathrm y}{\mathrm d\mathrm t})^2\mathrm w^2 (dtdx​)2(dtdy​)2w2 还有导弹始终指向船 ( d x d t d y d t ) …

Qt 网络编程

QT 网络编程 TCP 编程 模块引入 QT network 头文件 #include <QTcpServer> // TCP服务器端使用 #include <QTcpSocket> // TCP服务器和客户端都使用 编程流程 服务端 1&#xff09;实例化 QTcpServer 对象 -----------------------------> socket 2&#x…

【微服务】springboot整合kafka-stream使用详解

目录 一、前言 二、kafka stream概述 2.1 什么是kafka stream 2.2 为什么需要kafka stream 2.2.1 对接成本低 2.2.2 节省资源 2.2.3 使用简单 2.3 kafka stream特点 2.4 kafka stream中的一些概念 2.5 Kafka Stream应用场景 三、环境准备 3.1 搭建zk 3.1.1 自定义d…

05|提示工程(下):用思维链和思维树提升模型思考质量 ## 什么是 Chain of Thought

05&#xff5c;提示工程&#xff08;下&#xff09;&#xff1a;用思维链和思维树提升模型思考质量 什么是 Chain of Thought CoT 这个概念来源于学术界&#xff0c;是谷歌大脑的 Jason Wei 等人于 2022 年在论文《Chain-of-Thought Prompting Elicits Reasoning in Large La…

Unity使用Rider作为默认编辑器

01.Edit -> Preferences 02.Externel Tools -> Open by file extension 如果界面选项有Rider直接选择&#xff0c;如果没有选择Browse) 03.选择rider64.exe 04.成功关联

【C# 技术】 C# 常用排序方式——常规数据排序

C# 常用排序方式——常规数据排序 前言 在最近的项目中经常会对C#中的数据进行排序&#xff0c;对于基本数据类型&#xff0c;其排序方式比较简单&#xff0c;只需要调用内置算法即可实现&#xff0c;但对于自定义数据类型以及自定义排序规则的情况实现起来就比较麻烦&#…

西门子博途与菲尼克斯无线蓝牙模块通讯

菲尼克斯无线蓝牙模块 正常运行时,可以使用基站控制字0发送00E0(得到错误代码命令) 正常运行时,可以使用基站控制字0发送00E0(得到错误代码命令)得到各个无线I/O是否连 接的信号(状态字IN word 1的第2、6、10位) 小车1连接状态 小车2连接状态 小车3连接状态 1#小车自…

操作系统 day18(死锁)

死锁 定义 在并发环境下&#xff0c;各进程因竞争资源而造成的一种互相等待对方手里的资源 &#xff0c;导致各进程都阻塞&#xff0c;都无法向前推进的现象&#xff0c;就是死锁。发生死锁后若无外力干涉&#xff0c;这些进程都将无法向前推进。如下图&#xff1a; 死锁、饥饿…

激发大规模ClickHouse数据加载(2/3)大规模数据加载的加速调优

本文字数&#xff1a;4552&#xff1b;估计阅读时间&#xff1a;12 分钟 作者&#xff1a;Maksim Kita 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 Meetup活动&#xff1a; ClickHouse Shenzhen User Group第1届 Meetup 火热报名中…

网络第3天

基于UDP的TFTP文件传输 功能&#xff1a;下载、上传、退出 #include <myhead.h> #define IP "192.168.8.100" #define PORT 69 int download_file(int…

方法论系列:数据科学框架入门

目录 第一章 - 数据科学家如何战胜困难第二章 - 数据科学框架第三章 - 步骤1&#xff1a;定义问题和步骤2&#xff1a;收集数据第四章 - 步骤3&#xff1a;准备数据第五章 - 数据清洗的4个C&#xff1a;纠正、补全、创建和转换第六章 - 步骤4&#xff1a;使用统计学进行探索性…