今天学习了输入 输出的内容 以及File类的内容

本文介绍了Java中输入输出的概念,强调了流在处理I/O操作中的重要性,流可以隐藏不同设备间的数据传输细节。Java的流分为BIO、NIO和AIO三种类型。此外,文章还探讨了装饰器模式在Java.IO包中的应用,以及File类的基本使用,包括创建、删除、读取文件等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Input/Output :指跨越出了 JVM 的边界,与外界数据的源头或者目标数据源进行数据交换
Java 程序会从各种地方输入数据,比如文件,磁盘,网络,其它程序中
Java 会采用不同的方式输出执行结果,比如屏幕、文件、磁盘、网络等
     输入/ 输出是针对 JVM
输入输出中的流模型
Java 程序中,对于数据的输入输出操作以流 Stream 方式进行, JavaSE 提供各种各样的类用于使用相同的方法获取不同类型的数据,程序中通过标准的方法输入或者输出数据
流是处理输入 / 输出的一个洁净的方法,它不需要代码理解键盘和网络的不同。 Java 中流的实现是基于java.io包定义的类层次结构的
流概念
java.io 包通过数据流、序列化和文件系统为用户提供一种完成 I/O 操作的输入 / 输出流
数据流是指所有的数据通信通道
流是字节或字符数据的数据源或目的,用以隐藏数据传输细节,可以从流读取数据或将数据写到流
Java 程序不能直接操纵 I/O 设备,而是在程序和设备之间加入了一个中间介质,这就是流。 IO 输入输出通常指数据在内部存储器和外部存储器或其它周边设备之间的输入输出
流是数据传输的抽象表达,与具体设备无关。程序一旦建立了流,就可以不用理会起点或终点是何种设备
建立流实际上就是建立数据传输通道,将起点和终点连接起来
Java 程序通过流来完成输入 / 输出,它是生产或消费信息的抽象
        
        流通过Java 的输入 / 输出系统与物理设备链接。尽管与它们链接的物理设备不尽相同,但是所有流的行为具有同样的方式
        相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入, 从磁盘文件,从键盘或从网络套接字获取输入,一个输出流可以输出到控制台,磁盘文件或相连的网络。流是处理输入/ 输出的一个洁净的方法,它不需要代码理解键盘和网络的不同。
流的分类
Java 不同版本上来说,流可以分为 BIO NIO AIO 三大类。 Java 中的 BIO NIO AIO 理解为是 Java语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java API 就可以了。
BIO 即同步阻塞 I/O 模式,数据的读取写入必须阻塞在一个线程内等待其完成。
NIO 即同步非阻塞,一个线程不断的轮询每个输入输出的状态改变,如果有状态发生了改变,则进
行下一步的操作。
AIO 即异步非阻塞 I/O 模型,无需一个线程去轮询所有 IO 操作的状态改变,在相应的状态改变后,系
统会通知对应的线程来处理。
扩展类的功能
扩展一个类功能的最简单方式就是继承
装饰模式
装饰器模式 Decorator Pattern 允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵
主要解决:一般的为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着
扩展功能的增多,子类会很膨胀
优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模
式可以动态扩展一个实现类的功能
缺点:多层装饰比较复杂
使用场景: 1 、扩展一个类的功能。 2 、动态增加功能,动态撤销。
注意事项:可代替继承。
要求:
1 、被装饰方 ( 多个 ) 有个抽象角色 --- 接口、抽象类
2 、装饰方实现接口(继承抽象类),并将装饰方定义为属性
Decorator 模式又名包装器 Wrapper ,它的主要用途在于给一个对象动态的添加一些额外的职责。与生成子类相比,它更具有灵活性
装饰器模式中的四种角色:被装饰对象、装饰对象、装饰器 Decorator 、公共接口或抽象类
IO 流定义中使用装饰模式
Java.io 包中大量的使用了设计模式中的装饰模式 decorator 和适配器模式 adapter ,使 IO 库具有很强的对称性和可扩展性,对称性表现在I/O 的对称和 byte/char 流的对称上。
                                                                        File类        
File 提供了一种与机器无关的方式来描述一个文件对象的属性
对于目录, Java 把它简单的处理为一种特殊的文件,即文件名的列表
java.io.File 用于封装和平台无关的文件夹和文件夹对象,例如获取一个文件的字节数。这个写法是
针对windows 平台的,如果使用 mac 或者 linux 平台,则需要使用
通过类 File 中提供的方法,可以得到文件或者目录的描述信息,包括名称、所在路径、可读性等,
还可以生成新的文件、目录、改变文件名、删除文件、列出一个目录中所有的文件或者与某个模式
匹配的文件等
常见的构造方法
File(String pathName) path 为路径创建 File 对象,如果 pathname 是相对路径,则默认的当前路
径在系统属性 user.dir 中存储
File(String parent,String child) 这里文件对象的路径为相对于 parent 路径的 child 路径
重点方法
System . out . println ( ff . length ()); // 获取指定文件对象的字节数 , 单位为字节
System . out . println ( ff . exists ()); // 是否存在对应的文件对象 , 返回 true 则表示存在
ff . delete () // 删除文件或者文件夹,注意 Java 并不能保证删除一定成功
ff . mkdirs () // 创建多级文件夹 , 而使用 mkdir 只能创建一层文件夹
// 实际编程中很少使用的方法
listFiles (): File [] // 获取当前文件夹的所有子文件信息,子文件为 File 对象
静态属性
Separator 存储当前系统的路径分隔符
注意: \ 在字符串中为转义字符,如果需要使用 \ 则必须写成 \\ 。一般推荐使用/
访问文件名的方法
getName():String 获取文件名称
getPath():String 获取路径,如果构建 File 时使用的是相对路径,则这里返回的就是相对路径;如果
创建时参数为绝对路径,则返回绝对路径
getAbsolutePath():String 获取绝对路径
getParent():String 获取当前文件对象的上级 File 对象,如果构建文件对象时使用的是相对路径,则
这里返回为 null
文件检测相关方法
canWrite():boolean 是否可写
canRead():boolean 是否可读
首先 exists() 存在性判断,存在时再进行是否文件或者文件夹的判断
        isFile():boolean 是否是文件,因为 File 对象可以封装文件和文件夹
        isDirectory():boolean是否为文件夹
isAbsolute():boolean 是否为绝对路径
lastModified():long 文件的最后修改时间
常见操作
createNewFile():boolean 创建一个新文件
这个方法中有个受检型异常需要进行处理,处理方法: try/catch 结构或者在方法上 throws 抛出异常
如果文件不存在则返回 true ,表示创建成功;如果文件已经存在则返回 false ,表示创建失败
static createTempFile(String prefix, string suffix):File 这个临时文件名称会有随机内容
临时文件的默认存放位置为操作系统默认的临时文件位置
c:\Users\Administrator\AppData\Local\Temp\
exists():boolean 文件或者文件夹是否存在
length():long 获取文件大小,单位为字节,如果是文件夹则返回值没有指定
renameTo(File):boolean 修改名称,可以修改文件名和文件夹名称
delete():boolean 删除文件。也可以删除文件夹,要求文件夹为空,不能有文件和子文件夹
注意:因为具体的文件或者文件夹的删除操作是由操作系统负责实现的,所以 Java 不能保证一定能
够删除成功 !
deleteOnExit():void 退出系统时自动删除
目录操作方法
mkdir():boolean 只能创建一层文件夹,如果创建 d:/a1/a2/a3 时,当父文件夹 d:/a1/a2 不存在时则
创建失败
mkdirs():boolean 自动创建多级文件夹
list():String[] 获取当前文件夹的所有子文件信息
listFiles():File[] 获取当前文件夹的所有子文件信息,子文件为 File 对象
static listRoots():File[] 列出系统的所有的根路径
文件过滤器 FilenameFilter
带参数的 listFiles 方法支持对于子文件进行过滤,只获取需要满足条件的文件对象
FilenameFilter 接口中包含一个 accept(File dir,String name) 方法,该方法用于对指定 File 的所有子目录或者文件进行迭代,如果方法返回true list 方法会获取该目录或者文件
匿名内部类的写法 : 推荐写法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值