JAVA高级特性(六)——IO流(第一讲)
一、File 类概述和构造方法
File:它是文件和目录路径名的抽象表示
**文件和目录时可以通过File封装成对象;
** 对于File而言,其封装的并不是一个真正的存在的文件,仅仅是一个路径名而已,它可以是存在的,也可以是不存在的。将来是 要通过具体的操作把这个路径的内容转换为具体存在的。
1.1 构造方法
构造方法名 |
说明 |
File(String pathname) |
通过将给定的路径名字符串转换为抽象路径名来创建新的File实例 |
File(String parent,String child) |
从父路径名字符串和子路径名字符串创建新的File实例 |
File(File parent,String child) |
从父抽象路径名和子路径名字符串创建新的File实例 |
public class Atest {public static void main(String[] args) {File f1=new File("E:\\aaa\\sss.java");System.out.println(f1);File f2=new File("E:\\aaa","sss.java");System.out.println(f2);File f3=new File("E:\\aaa");File f4=new File(f3,"sss.java");System.out.println(f4);//输出结果//E\aaa\sss.java//E\aaa\sss.java//E\aaa\sss.java}
}
1.2 创建目录的方法
创建目录的方法 |
说明 |
public boolean createNewFile() 创文件 |
当具有该文件的文件名不存在时,床技安一个由该抽象路径名命名的新空文件 |
public boolean mkdir() 创文件夹 |
创建由此抽象路径名命名的目录 |
public boolean mkdirs() 创多层文件夹 |
创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 |
补充一个命令: getparentFile() 获得该目录的父类对象
public class Atest {
public static void main(String[] args) throws IOException {File f1 = new File("E:\\aaaa\\sss.java");//判断是否目录存在if (!f1.exists()) {File f = f1.getParentFile();//获得父级文件目录if (!f.exists())f.mkdirs();}//创建多级目录f1.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.java//存在sss文件,则返回flase//不存在,则创建并返回true //以下同这一条
}
}
1.3 File 类判断和获取功能
方法名 |
说明 |
public boolean isDirectory(); |
测试此抽象路径名表示File是否为目录 |
public boolean isFile() |
测试此抽象路径名表示File是否为文件 |
public boolean exists() |
测试此抽象路径名表示的File是否存在 |
public String getAbsolutePath() |
返回此抽象路径名的绝对路径名字符串,,,值得是完整路径 |
public String getPath() |
将此抽象路径名转换为路径名字符串,,,指的是我们封装的路径,也就是new File定义的路径,(相对路径) |
public String getName() |
返回由此抽象路径名表示的文件或目录的名称 |
public String[] list() |
返回此抽象路径名表示的目录中的文件和目录的名称字符串数组:输出文件夹名或文件名组成的数组 |
public File[] listFiles() |
返回此抽象路径名表示的目录中的文件和目录的File对象数组:输出文件和文件夹的具体路径组成的File数组 |
public class Atest {public static void main(String[] args) throws IOException {File f1=new File("E:\\aaaa\\sss.java");f1.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.javaFile f5=new File("E:\\aaaa\\sss1.java");f5.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.javaFile f6=new File("E:\\aaaa\\sss2.java");f6.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.javaFile f7=new File("E:\\aaaa\\sss3.java");f7.createNewFile();//先找到aaaa文件,然后在其下创建文件sss.javaSystem.out.println(f1.isDirectory());//isDirectory()判断f1是否为目录System.out.println(f5.isFile());//isFile()判断f5是否为文件System.out.println(f1.exists());//exists()判断f1是否存在System.out.println(f1.getAbsolutePath());//getAbsolutePath()返回此路径名的绝对路径字符串// 也是用字符串的格式输出路径System.out.println(f1.getPath()); //获得封装的文件和文件名路径System.out.println(f1.getName());//获得文件或文件夹名File f0=new File("E:\\aaaa");//list 操作输出String集合String[] list = f0.list();for (String s : list) {System.out.println(s);//listFiles操作输出File类集合,File[] files = f0.listFiles();for (File file : files) {System.out.println(file);}}}}
1.6 File类删除功能
方法名 |
说明 |
public boolean delete() |
删除由此抽象路径表示的文件或目录 |
注意:删除文件夹时,文件夹内有文件必须先删除才能删除这个文件夹 |
1.7 File类总结
增:creatNewFile()、mkdir()、mkdirs()
删:delete()、deleteOnExit() 指程序结束运行后删除
改:renameTo() 将文件移动并改名称
查:getName() getPath() getAbsolutePath() getParentPath() List() ListFile()
二、IO流概述和分类
2.1 IO流概述和分类
2.1.1 IO流概述:
IO:输入输出(INPUT,OUTPUT)
流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是数据传输;
IO流:就是用来处理设备间数据传输问题的;
常见的应用:文件复制、问价你上传、文件下载。
2.1.2 IO流的分类
1、按照数据的流向:
输入流:读数据;
输出流:写数据;
2、按照数据类型来分:
字节流: 字节输入流和字节输出流
字符流: 字符输入流和字符输出流。
在什么情况下使用:
如果数据通过Window自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流,否则使用字节流。如果不知道该使用哪种流,就使用字节流。
三、字节流 Stream
3.1 字节流写数据
字节: 1、数字和字母占一个字节;
2、汉字: 如果是GBK编码 ——占2个字节;如果是UIF-8编码(idea中默认的编码)——占用3个字节
字节流抽象基类
**InputSream:这个抽象类是表示字节输入流的所有类的超类
**OutputStream:这个抽象类是表示字节输出流的所有类的超类
子类名特点:子类名称都是以其父类名作为子类名的后缀。
3.1.1字节输出流:
FileOutputStream:文件输出流用于将数据写入File
构造方法:
FileOutputStream(String name):创建文件输出流以指定的名称写入文件
FuliOutputStream(String name,boolean append )//追加写入对象,append为“true”则是追加写入类型,反之不是
FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件
3.1.2 使用字节输出流写数据的步骤:
1、创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
2、调用字节输出流对象的写数据方法;
3、释放资源 fos.close()(关闭此文件输出流并释放与此流相关联的任何系统资源)
3.1.3 字节流写数据的三种方式
方法名 |
说明 |
void write (int b) |
将指定的字节写入此文件输出流 |
void write(byte[] b) |
将b.length字节从指定的字节数组写入此文件输出流 |
void write (byte[] b,int off,int len) |
从字节数组b的第off的索引开始写入,写len个元素数据 |
补充:快速获得字节数组的命令——String byte getBytes();
Byte s="abcde".getBytes();
相当于: Byte[] s={97,98,99,100,101};
3.1.4 字节流写数据的两个小问题
1、写完数据后加换行符:
windows: "\t\n"; linux: "\n"; mac: "\r"
2、字节流写数据如何追加:
采用构造方式构造追加性质的对象:
————public FileOutputStream(String name,boolean append):创建文件输出流以指定的名称写入文件。如果第二个参数为true,则字节将写入文件的末尾而不是开头。
3.1.4 字节流写数据加异常处理
利用 try...catch 进行异常判断,
finally:在异常处理时提供finally块来执行所有清除操作。比如说IO流中的释放资源;
特点是一定会执行,直到JVM虚拟机退出
3.2 字节流读数据 (都是通过ACSI码值转换的,没有数据默认恢复为-1)
FileInputStream
创建对象格式:FileInputStream fis=new FileInputStream(String string);
读取方法:1、一个字符一个读取;
2、一个字节数组的输出
3.2.1 读数据的命令
public int read(); 返回值为-1时,则数据已经读完,利用这个返回值可以循环判断
FileOutputStream fos=new FileOutputStream(""E:oop20211105\\fos.txt");
FileInputStream fis=new FileInputStream(""E:oop20211105\\fos.txt");
byte[] b="abcde".getBytes();
fos.write(b); //将字节数组b写入文件fos中,写数据
if(fis!=nill){int a;while((a=fis.read)!=-1){ //读取的值为-1 则表示没有数据了System.out.print((char)a); // 读取的数据是转换的ASCII值,//则利用char转回文件中的数据}
}
fis.close();
fos.close(); //释放空间
3.2.2 一次读字节数组的数据
int read (byte[] b); 从该输入流读取最多b.length个字节数据到这个数组中,返回值为-1时代表以及读完。
String(byte[] bytes,start,end); String 中的构造方法,是将字节数组转换为字符串输出
start表示其实的索引,end表示输出的索引长度
byte[] bys=new byte[5]; //定义一个字节数组,用于每次读取5个元素
int len; //len表示读取的元素长度
if(fis!=null){while((len=fis.read(bys))!=-1){ //判断实际赌场字节的长度为-1,表示结束System.out.print(new String(bys,0,len)); //new String 是构造对象}
}
fis.close();
fos.close();
3.3 字节缓冲流
字节缓冲流: 为了提高读取速度
1、BufferOutputStream:该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
2、BuffteredInputSream:创建BufferedInputStream将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区根据需要从所包含的输入流中重新填充,一次性很多字节
构造方法:
**字节缓冲输出流:BufferedOutputStream(OutputStream out)
** 字节缓冲输入流:BufferedInputStream( InputStream in )
原因:字节缓冲流仅仅只是提供一个缓冲区,而真正的读写数据还是依靠基本的字节流对象进行处理。
3.4 总结字节流
字节流创建对象顺序: 字节缓冲流—>字节流—>文件
JAVA高级特性(六)——IO流(第一讲)相关推荐
- java高级编程之IO流
1.流的分类 1.1按流向分类 分为输入流和输出流 1.2按流角色分类 分为节点流和处理流 1.3按数据单位分类 分为字符流和字节流 2.流的四个抽象基类 InputStream.OutputStre ...
- Educoder–Java高级特性(第一章)- IO流【笔记+参考代码】
Educoder–Java高级特性(第一章)- IO流[笔记+参考代码] 第一关 1.下列关于字节和字符的说法正确的是(BC) A.字节 = 字符 + 编码 B.字符 = 字节 + 编码 C.字节 = ...
- Educoder -Java高级特性 - IO流 4关
Educoder -Java高级特性 - IO流 第一关 第二关:本关任务:使用输入输出流读写文件. 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: ...
- 第4天 java高级特性增强 ---有用 第一遍
第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...
- Java学习之java高级特性
From:https://blog.csdn.net/w252064/article/details/79923999 [Java高级特性详解]:https://blog.csdn.net/qq_37 ...
- Java 高级特性 --- 反射
From:Java 高级特性 --- 反射:https://www.jianshu.com/p/9be58ee20dee From:Java 基础之 --- 反射(非常重要):https://blog ...
- java高级特性增强01
java高级特性增强 总结: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 1. java多线程基本知识 1.1. 进程介绍 ...
- Java高级特性增强-多线程
请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...
- 头歌Educoder——Java高级特性 - JDBC(上)
第1关:JDBC连接数据库 任务描述 本关任务:使用jdbc连接数据库并完成创建数据库和创建表的操作. 相关知识 JDBC API提供以下接口和类: DriverManager:此类管理数据库驱动程序 ...
- 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口
文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...
最新文章
- OVS DPDK vhost-user详解(十三)
- 笔记-信息系统安全管理-网络安全工具
- cassandra的命令
- spring-boot-starter-logging
- linux 删除mysql_MySQL— Linux下解压包方式安装
- Loadrunner多服务器连接问题
- UOJ#191. 【集训队互测2016】Unknown
- 关于移动手机端富文本编辑器qeditor图片上传改造
- docker公共存储库_Docker实战001:简单的认识下docker
- Python实时获取鼠标下窗口文本
- 重学C++语言之路:C++语言学习工具和环境
- Rust : Pointer......to be continued
- 与孩子一起学编程15章
- 杰奇python采集器_linux下能完美运行的杰奇采集器ckp
- STM32 JLINK接口定义 JTAG/SWD
- 【逆向JS】调用网易云音乐搜歌功能并爬取评论Python/Java
- C#获取电脑MAC地址(物理地址)的几种方法
- 算法之狄克斯特拉算法
- 2021-06-27微信公众号模板消息群发
- 经典CNN模型介绍及Pytorch实现
热门文章
- 小米5C线刷兼救砖_解账户锁_纯净刷机包_教程
- 【资料补充】元素定位和定位辅助工具
- 我的办公助手(OfficeAssist) V0.1: 一个能查看农历和节假日的小工具,带提醒功能
- java中3.14是什么符号_java中3.14f是什么意思 C++问题下列选项中属
- Raspberry Pi NOOBS setup
- 基于Apache的反向代理服务器
- Xftp中汉字文件夹名显示乱码解决方案
- W3c phpl基础参考手册-2016-01参考
- 修改带important的css样式
- Android 做一款直播APP?一分钟掌握乐视云直播Demo