File只能对文件进行外部操作,引入I/O流

I/O流的概念

IO就是Input and Output的简写,也就是输入和输出的含义

IO流就是指读写数据时像流水一样从一端流到另外一端,因此得名为“流”

Java的输入/输出处理封装在java.io包中。Java将这些不同类型的输入/输出源抽象为流

用统一的接口来表示,并提供独立于设备和平台的流操作类

分类:

字节流和字符流:根据流操作的数据单位的不同,可以分为字节流和字符流

输入流和输出流:根据流传输方向的不同,又可分为输入流和输出流(对于内存而言的)

节点流和处理流:根据流的功能不同,可以分为节点流和处理流

(和最终处理相关的叫做节点流(System.in)处理流(Scanner中的nextLine、nextInt.....),处理流以节点流作为构造方法的参数)

四个类为流的顶级类:分别为InputStream和OutputStream,Reader和Writer(都为抽象类,并且是所有流类型的父类)

字符流有两个抽象的顶级父类,分别是Reader和Writer

使用IO流编程的步骤

1、分析需要使用哪些流? 选择一个超类

2、根据数据源选择正确的节点流 最终操作对象和数据的来源

3、创建节点流对象

【可选】如果需要,还可能会创建处理流对象

4、使用流对象的read或者write方法读取或者写入

5、读写完毕,调用流对象的close()方法关闭流

File类和IO流的区别:File类处理那些不需要关心文件内容的操作,IO流则是处理那些需要处理文件内容的操作。

标准输入和标准输出:在控制台内输入和输出,就是标准输入和标准输出

import java.io.File;/*** @author limerence**/
public class FileDome {// 问题:将文件名全部改名// 解决方案:1、列举文件夹下的所有文件public static void main(String[] args) {File dir = new File("文件路径");File[] files = dir.listFiles();if (file.exists()) { // 判断文件是否存在 如果存在执行以下代码System.out.println("文件的名称是:" + file.getName()); // a.txtSystem.out.println("文件的大小是:" + file.length()); // 0System.out.println("文件的最后一次次改时间是" + format.format(new Date(file.lastModified()))); // 2021年08月19日 22:23:10System.out.println("文件的绝对路径是:" + file.getAbsolutePath()); // z:/a.txtSystem.out.println(file.delete() ? "文件删除成功" : "文件删除失败"); // 文件删除成功} else {// 如果文件不存在 创建文件try {System.out.println(file.createNewFile() ? "文件创建成功" : "文件创建失败"); // 文件创建成功} catch (IOException e) {e.printStackTrace();}}// 2、提取每个文件的文件名,进行加工for (File file : files) {String filename = file.getName();System.out.println(filename);// 只能处理个位的编号。别的技术处理(正则表达式)int i = Integer.parseInt(filename.substring(0, 1));String newName = (i - 1) + filename.substring(1);System.out.println(newName);// 用新的名字命名,创建File对象,如果不指定路径,则默认在Java工程目录下错误示例:
//          file.renameTo(new File(newName));// 正确示例:file.renameTo(new File(dir,newName));// File只能对文件进行外部操作,引入I/O流// java的输入/输出处理封装在java.io包中。Java将这些不同类型的输入/输出源抽象为流}}
}

Java中除了IO可以处理输入输出之外,还提供了一套全新的API,叫NIO

NIO相关类都被放在java.nio包及子包下,并且对原java.io包中的很多类进行改写

NIO有三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择器)

NIO是面向缓冲区,或者面向块编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式高伸缩性网络

NIO和BIO的比较

1)BIO以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O高很多

2)BIO是阻塞的,NIO是非阻塞的

3)BIO基于字节流和字符流进行操作,而NIO基于Channel(通道)和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的时间(比如:连接请求,数据到达等),因此使用单个线程就可以监听多个客户端通道

NIO三大核心原理

每个channel都会对应一个Buffer(在 NIO 中,Buffer 是一个顶层父类,它是一个抽象类)

2)Selector 对应一个线程, 一个线程对应多个channel(连接)

3)该图反应了有三个channel注册到该selector//程序

4)程序切换到哪个channel是由事件决定的,Event就是一个重要的概念

5)Selector 会根据不同的事件,在各个通道上切换

6)Buffer 就是一个内存块 , 底层是有一个数组

7)数据的读取写入是通过Buffer,这个和BIO,BIO中或者是输入流,或者是输出流, 不能双向,但是 NIO 的 Buffer 是可以读也可以写, 需要 flip 方法切换。channel 是双向的, 可以返回底层操作系统的情况, 比如 Linux ,底层的操作系统通道就是双向的

针对文件的读写操作,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream

FileInputStream是InputStream的子类,它是操作文件的字节输入流,专门用于读取文件中的数据

对象的输入和输出:序列化和反序列化

序列化:将Java对象写入到文件中或者网络中——输出

反序列化:从文件中或者网络中还原Java对象——输入

反序列化有要求:必须和序列化时是同一个类

8、Java的 I O流与文件相关推荐

  1. java第九章IO流与文件操作

    使用输出流将String保存到文件(byte数组)byte[] bytes = "Java数据交流管道--IO流".getBytes(); 使用Filewriter 文章目录 9- ...

  2. 【Java基础】IO流与文件操作的一些手写代码面试题

    概述 代码 概述 IO流是我们最基础的数据操作,最近我身边的一些朋友经常遇到这样的面试题,有的居然还是手写代码,真的太残酷了:不过话说回来,IO流确实是编程里最最基础的操作了,需要我们好好掌握,熟记于 ...

  3. java中用I/O流实现文件上传

    依赖添加 需要添加以下两个依赖 <dependency><groupId>commons-fileupload</groupId><artifactId> ...

  4. java输出流输入流的使用_Java中的IO流之文件输入输出流

    Java中的IO流之文件输入输出流 1.文件流介绍 文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流.文件流位于java.io包下. 输入输出流分别是FileInputSteam和Fi ...

  5. java 流的概念_举例讲解Java中的Stream流概念

    1.基本的输入流和输出流 流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用&qu ...

  6. Java基础学习—— IO流

    Java基础学习-- IO流 1 文件 1.1 文件的创建 1.2 文件常用的方法 2 IO流 2.1 FileInputStream 2.2 FileOutputStream 2.3 文件的拷贝 2 ...

  7. java缓冲流 复制文件_java使用缓冲流复制文件的方法

    本文实例为大家分享了java使用缓冲流复制文件的具体代码,供大家参考,具体内容如下 [1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加 ...

  8. Java IO流之【缓冲流和文件流复制文件对比】

    与文件流相比,缓冲流复制文件更快 代码: package Homework;import java.io.BufferedOutputStream; import java.io.File; impo ...

  9. java io流(字符流) 文件打开、读取文件、关闭文件

    java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*;public class Index{public stati ...

最新文章

  1. 如何解决MySQL连接超时关闭
  2. 最近ES遇到discover老是失败问题,ping主节点和node节点正常,抓包发现了大量的retransmission、tcp out of order、dup ack问题。...
  3. 用VuePress来搭建一个极简的静态网站
  4. iOS 文件预览 UIDocumentInteractionController
  5. 界面优美的linux,Ubuntu 11.04新版发布 诠释精美用户界面
  6. 为什么要使用NoSQL
  7. 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
  8. html教程作用,HTML段落的作用及教程
  9. Spring 注解配置(2)——@Autowired
  10. 富勒wms系统里的定时器id_WMS项目实施,该如何调研?
  11. 程序员到底要不要读研,过来人给你几点建议!
  12. connect to address IP: No route to host
  13. 向oracle增加两个重做日志组文件,Oracle重做日志文件
  14. .net core 中的[FromBody]和[FromFrom]的区别
  15. 45. Django 2.1.7 项目技巧 - 创建apps应用目录归纳所有应用
  16. 神经网络模型的模型假设,神经网络模型预测控制
  17. 数据分析 | R语言绘制中国地图
  18. vmware虚拟机卸载清理工具 1.3 最新版
  19. # 使用 DHCP 动态管理主机地址##
  20. Maven 三种archetype说明

热门文章

  1. 0.3W微功率放大器
  2. Win11 22H2怎么卸载更新补丁?Win11 22H2卸载更新补丁的步骤
  3. 【ZZULIOJ】1073: 再谈鸡兔同笼问题
  4. 关于redis分布式锁,zookeeper分布式锁原理的一些学习与思考
  5. 一文了解提权:溢出提权和第三方组件提权
  6. G1GC优化方案—官方原版
  7. pageable设置size_SpringBoot分页Pageable 自定义配置最大size
  8. Caused by: java.net.UnknownHostException: bogon: bogon: Name or service not known
  9. win10系统微软账号登陆错误报错误码0x80190001
  10. videojs+hsl播放直播流