当前位置: 首页 > news >正文

I0流学习

文章目录

  • File类的使用
    • File 类的使用
    • 常用构造器
    • 路径分隔符
    • 常用方法
  • IO流原理及流的分类
    • 流的分类
    • 流的体系结构
    • 节点流
    • 缓冲流
    • 转换流

File类的使用

File 类的使用

  1. file类的一个对象,代表一个文件或一个文件目录
  2. file类声明在java.io包下
  3. File类中涉及到关于文件或文件目录的创建,删除,重命名,修改时间,文件大小等方法并未涉及到写入或读取文件内容的操作如果需要读取或写入文件内容,必须使用io流来完成
  4. 后续File类的对象长会作为参数传递到流的构造器,并指明读取或写入的"终点"

常用构造器

public File(String pathname)
  • 以pathname为路径创建File对象,可以是绝对路径或者相对路径
public File(String parent,String child)
  • 以parent为父路径,child为子路径创建File对象。
public File(File parent,String child)
  • 根据一个父File对象和子文件路径创建File对象

路径分隔符

  1. 路径中的每级目录之间用一个路径分隔符隔开
  2. windows和DOS系统默认使用“\”来表示
  3. UNIX和URL使用“/”来表示

常用方法

  • public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
 File file=new File("F:\\Learn\\learn\\src");String[] list=file.list();for(String s:list){System.out.println(s);}
  • public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
    File[] file1=file.listFiles();for(File f:file1){System.out.println(f.getName());}
  • public String getAbsolutePath():获取绝对路径
  • public String getPath() :获取路径
  • public String getName() :获取名称
  • public String getParent():获取上层文件目录路径。若无,返回null
  • public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
  • public long lastModified() :获取最后一次的修改时间,毫秒值
  • public boolean isDirectory():判断是否是文件目录
  • public boolean isFile() :判断是否是文件
  • public boolean exists() :判断是否存在
  • public boolean canRead() :判断是否可读
  • public boolean canWrite() :判断是否可写
  • public boolean isHidden() :判断是否隐藏

IO流原理及流的分类

流的分类

  1. 操作数据单位:字节流,字符流
  2. 数据的流向:输入流,输出流
  3. 流的角色:节点流,处理流

流的体系结构

抽象基类节点流缓冲流
InputStreamFileInputStreamBufferInputStream
OutputStreamFileOutStreamBufferOutStream
readerFileReaderBufferReader
WriterFileWriterBufferWirter

节点流

  • 读取文件
//1.建立一个流对象,将已存在的一个文件加载进流。FileReader fr = new FileReader(new File(Test.txt”));
//2.创建一个临时存放数据的数组。char[] ch = new char[1024];
//3.调用流对象的读取方法将流中的数据读入到数组中。fr.read(ch);
//4. 关闭资源。fr.close();
  • 写入文件
//1.创建流对象,建立数据存放文件FileWriter fw = new FileWriter(new File(Test.txt”));
//2.调用流对象的写入方法,将数据写入流fw.write(“atguigu-songhongkang”);
//3.关闭流资源,并将流中的数据清空到文件中。fw.close();
  • 注意
    1. 定义文件路径时,注意:可以用“/”或者“\”。
    2. 在写入一个文件时,如果使用构造器FileOutputStream(file),则目录下有同名文件将被覆盖。
    3. 在读取文件时,必须保证该文件已存在,否则报异常。
    4. 字节流操作字节,比如:.mp3,.avi,.rmvb,mp4,.jpg,.doc,.ppt

缓冲流

  1. 缓冲流:
    • BufferedInputStream,
    • BufferedOutputStream,
    • BufferedReader,
    • BufferedReader
  2. 作用:
    • 提高流的读取,写入的书读
    • 提高读写速度的原因:内部提供了一个缓冲区
public class BufferTest {/*实现非文本文件的复制*/@Testpublic void testBuffer(){FileInputStream fis= null;FileOutputStream fos= null;BufferedInputStream bis= null;BufferedOutputStream bos= null;try {//1.造文件File srcFile=new File("F:\\Learn\\learn\\R.jpg");File dstFile=new File("F:\\Learn\\learn\\R3.jpg");//2.1造节点流fis = new FileInputStream(srcFile);fos = new FileOutputStream(dstFile);//2.2造缓冲流bis = new BufferedInputStream(fis);bos = new BufferedOutputStream(fos);//3.复制的细节:读取,写入byte[] buffer=new byte[5];int len;while((len=bis.read(buffer))!=-1){bos.write(buffer,0,len);}} catch (IOException e) {throw new RuntimeException(e);} finally {if(bis!=null){//4.资源关闭//要求:先关闭外层的流,在关闭内层的流try {bos.close();} catch (IOException e) {throw new RuntimeException(e);}}if(fos!=null){try {bis.close();} catch (IOException e) {throw new RuntimeException(e);}//说明:关闭外层流的同时,内层流也会同时的关闭,关于内层流的关闭,我们可以省略//fos.close();//fis.close();}}}

转换流

  1. 转换流

    • InputStreamReader:将一个字节的输入流转换为字符的输入流
    • OutPutStreamReader:将一个字符的输出流转换为字节的输出流
  2. 作用:提供字节流与字符流之间的转换

    • 解码:字节,字节数组—>字符数组,字符串
    • 编码:字符数组,字符串—>字节,字节数组
  3. 字符集

    • ASCII:美国标准信息交换码。用一个字节的7位可以表示。
      ISO8859-1:拉丁码表。欧洲码表用一个字节的8位表示。
      GB2312:中国的中文编码表。最多两个字节编码所有字符
      GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码
      Unicode:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有文字都用两个字节来表示。
      UTF-8:变长的编码方式,可用1-4个字节来表示一个字符
http://www.dtcms.com/a/389508.html

相关文章:

  • 摄影灯MCU方案开发,摄影灯单片机分析
  • Salesforce知识点: LWC 组件通信全解析
  • Lua语言程序设计3:闭包、模式匹配、日期和时间
  • Freertos系列教学(删除函数的使用)
  • DevOps平台建设 - 总体设计文档的核心架构与关键技术实践
  • 系统中间件与云虚拟化-云数据库与数据库访问中间件ORM框架-Sannic-非实验
  • DTC BluSDR™系列-满足您所有的无人机通信需求
  • 【猛犸AI科技】深度强化学习SCI/EI/CCF/中文核心一站式辅导
  • 美创科技闪耀亚洲教育装备博览会,以数据安全护航教育数字化
  • 1.css的几种定位方式
  • 【C#】对比两个坐标点是否相同的多种方法
  • Ubuntu之旅-03 InfluxDB
  • IEEE出版,稳定检索!|2025年智能制造、机器人与自动化国际学术会议 (IMRA 2025)
  • iOS 上架流程详细指南 苹果应用发布步骤、ipa 文件上传 打包上架实战经验
  • MessageBus 通信组件库
  • 性能测试-jmeter12-万能插件包管理器jmeter-plugins
  • 工地项目管理系统有什么强大功能?工程企业实现数字化的步骤
  • 【开题答辩全过程】以 “萌崽”宠物社交小程序为例,包含答辩的问题和答案
  • Spring Cloud Alibaba微服务架构深度解析:基于Nacos、Gateway、OpenFeign与Sentinel的现代化实践
  • 大模型-Attention面试
  • Hadoop3.3.5搭建指南(简约版)
  • Python运算符与表达式
  • “双碳”目标下,塔能科技如何用“物联网精准节能”重塑城市能源生态?
  • 格恩朗气体涡轮流量计:精准计量每一方气,守护能源高效利用
  • 从感知机到多层感知机:深度学习入门核心知识解析
  • 从Java ArrayList 学习泛型设计
  • 【Amber报错1】 Amber/Miniconda 与系统 Bash 的 libtinfo.so.6冲突
  • AI智慧能力的核心引擎,自注意力机制
  • 35、模型量化与压缩实践
  • LeetCode 16.最接近的三数之和