一、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流(第一讲)相关推荐

  1. java高级编程之IO流

    1.流的分类 1.1按流向分类 分为输入流和输出流 1.2按流角色分类 分为节点流和处理流 1.3按数据单位分类 分为字符流和字节流 2.流的四个抽象基类 InputStream.OutputStre ...

  2. Educoder–Java高级特性(第一章)- IO流【笔记+参考代码】

    Educoder–Java高级特性(第一章)- IO流[笔记+参考代码] 第一关 1.下列关于字节和字符的说法正确的是(BC) A.字节 = 字符 + 编码 B.字符 = 字节 + 编码 C.字节 = ...

  3. Educoder -Java高级特性 - IO流 4关

    Educoder -Java高级特性 - IO流 第一关 第二关:本关任务:使用输入输出流读写文件. 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: ...

  4. 第4天 java高级特性增强 ---有用 第一遍

    第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...

  5. Java学习之java高级特性

    From:https://blog.csdn.net/w252064/article/details/79923999 [Java高级特性详解]:https://blog.csdn.net/qq_37 ...

  6. Java 高级特性 --- 反射

    From:Java 高级特性 --- 反射:https://www.jianshu.com/p/9be58ee20dee From:Java 基础之 --- 反射(非常重要):https://blog ...

  7. java高级特性增强01

    java高级特性增强 总结: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 1. java多线程基本知识 1.1. 进程介绍 ...

  8. Java高级特性增强-多线程

    请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...

  9. 头歌Educoder——Java高级特性 - JDBC(上)

    第1关:JDBC连接数据库 任务描述 本关任务:使用jdbc连接数据库并完成创建数据库和创建表的操作. 相关知识 JDBC API提供以下接口和类: DriverManager:此类管理数据库驱动程序 ...

  10. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

    文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...

最新文章

  1. OVS DPDK vhost-user详解(十三)
  2. 笔记-信息系统安全管理-网络安全工具
  3. cassandra的命令
  4. spring-boot-starter-logging
  5. linux 删除mysql_MySQL— Linux下解压包方式安装
  6. Loadrunner多服务器连接问题
  7. UOJ#191. 【集训队互测2016】Unknown
  8. 关于移动手机端富文本编辑器qeditor图片上传改造
  9. docker公共存储库_Docker实战001:简单的认识下docker
  10. Python实时获取鼠标下窗口文本
  11. 重学C++语言之路:C++语言学习工具和环境
  12. Rust : Pointer......to be continued
  13. 与孩子一起学编程15章
  14. 杰奇python采集器_linux下能完美运行的杰奇采集器ckp
  15. STM32 JLINK接口定义 JTAG/SWD
  16. 【逆向JS】调用网易云音乐搜歌功能并爬取评论Python/Java
  17. C#获取电脑MAC地址(物理地址)的几种方法
  18. 算法之狄克斯特拉算法
  19. 2021-06-27微信公众号模板消息群发
  20. 经典CNN模型介绍及Pytorch实现

热门文章

  1. 小米5C线刷兼救砖_解账户锁_纯净刷机包_教程
  2. 【资料补充】元素定位和定位辅助工具
  3. 我的办公助手(OfficeAssist) V0.1: 一个能查看农历和节假日的小工具,带提醒功能
  4. java中3.14是什么符号_java中3.14f是什么意思 C++问题下列选项中属
  5. Raspberry Pi NOOBS setup
  6. 基于Apache的反向代理服务器
  7. Xftp中汉字文件夹名显示乱码解决方案
  8. W3c phpl基础参考手册-2016-01参考
  9. 修改带important的css样式
  10. Android 做一款直播APP?一分钟掌握乐视云直播Demo