带妹学Java第十七天(至IO流)

重点

1.File相关概述

1.1File是什么?

 File 翻译过来指的是文件,表示一个文件类
 File更应该叫做一个路径,包括文件路径和文件夹路径
 File是指文件和目录路径名的抽象表示形式

1.2 路径的分类

 路径分为绝对路径相对路径
 绝对路径是一个固定的路径,从盘符开始
 C:\Users\10301\Desktop\eclipse\plugins
 相对路径相对于某个位置开始
 如:eclipse\plugins就是一个相对路径

2.File 类的使用

2.1 File的构造方法

 File(String pathname):根据一个路径得到File对象
 File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
 File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对

2.2 File类的创建功能

 public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
 public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
 public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

*注意事项:*如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。

2.3File类的重命名功能

 public boolean renameTo(File dest):把文件重命名为指定的文件路径
 重命名注意事项:
 如果路径名相同,就是改名。
 如果路径名不同,就是改名并剪切。
在这里插入图片描述

2.4 File类的删除功能

 public boolean delete():删除文件或者文件夹
 删除注意事项:
 Java中的删除不走回收站。
 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
在这里插入图片描述

2.5File类的判断功能

 public boolean isDirectory():判断是否是目录
 public boolean isFile():判断是否是文件
 public boolean exists():判断是否存在
 public boolean canRead():判断是否可读
 public boolean canWrite():判断是否可写
 public boolean isHidden():判断是否隐藏

2.6File类的获取功能

 public String getAbsolutePath():获取绝对路径
 public String getPath():获取路径
 public String getName():获取名称
 public long length():获取长度。字节数
 public long lastModified():获取最后一次的修改时间,毫秒值
 public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
 public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200107210241757.png

2.7文件名称过滤器

 File类提供了两个文件过滤器方法
 public String[] list(FilenameFilter filter)
 public File[] listFiles(FileFilter filter)
 这两个方法在返回数组前就可以把符合条件的文件过滤出来

见练习2

3.IO流相关概念

3.1什么是IO流?

 IO流用来处理设备之间的数据传输
 Java对数据的操作是通过流的方式
 Java用于操作流的类都在IO包中

3.2 IO流分类

  • 按流向来分

 输入流InpuStream(读取数据)
 输出流OutStream(写数据)

  • 按操作类型分

 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
 字符流 : 字符流只能操作纯字符数据

3.3 Java中常用IO流的类

  • 字节流的抽象父类:

 InputStream 输入流
 OutputStream 输出流

  • 字符流的抽象父类:

 Reader 字符读取流
 Writer 字符写入流

4.InputStream

  • InputStream是抽象类,表示字节输入流,用于读数据。
  • 直接已知子类:
     AudioInputStream
     ByteArrayInputStream
     FileInputStream(学习文件输入流)
     FilterInputStream
     ObjectInputStream
     PipedInputStream
     SequenceInputStream
     StringBufferInputStream

5.FileInputStream

5.1概述:

FileInputStream 从文件系统中的某个文件中获得输入字节。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader

5.2构造方法

 FileInputStream(File file)
 FileInputStream(String name)

5.3方法

 Int read()方法,读取一个字节

6.OutputStream

6.1概述

 outputStream译为输出流
 OutputStream是一个抽象类,它用于往文件里写入内容

6.2子类

在这里插入图片描述

7.FileOutputStream

概述
 表示文件输出流,用于往文件写内容
 构造方法:
 FileOutputStream(String name)
 FileOutputStream(File file)
 方法:
 write(int b);//每次写一个字节
 write(byte[] b) ;//一次写多个字节

练习题

1.输出指定目录下指定后缀的文件名

 需求:判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
方式1
在这里插入图片描述
方式2
在这里插入图片描述

2.判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称

在这里插入图片描述

3.读取txt文件内容

在这里插入图片描述

4.读取txt文件内容另外一种写法

在这里插入图片描述
//读到的数据是码表的对应值,读取a,就是97

3.往b.txt 写个内容

在这里插入图片描述

5.拷贝图片和音频

 原理,使用输入流读取数据,使用输出流写数据
 画图讲原理和性能
每次都读一次字节,太慢,效率太低
在这里插入图片描述
在这里插入图片描述

面试题

1.read()方法读取的是一个字节,为什么返回是int,而不是byte ?

public static void main(String[] args) {
		//面试题:read()方法读取的是一个字节,为什么返回是int,而不是byte ?
		//如果使用FileInputStream读取图片数据
		/**
		 * 00010111 00010111 00010111 00010111
		 * 00010111 11111111 00010111 00010111
		 * 
		 * byte:11111111 表示的-1
		 * int:00000000 00000000 00000000 11111111
		 * 
		 * 为什么11111111是表示-1?
		 * 因为计算机是以补码的方式计算
		 * 补码: 11111111 (-1)
		 * 反码: 11111110
		 * 原码:  10000001
		 * 
		 * 假如使用FileInputStream读取图片的时候,
		 * 图片中间有一段数据刚好是 11111111,这八个一表示的-1,用byte接收
		 * java程序如果读取的是-1,后面的数据就不读取
		 * 如果把8个1转成int,那就是00000000 00000000 00000000 11111111,这个表示255,就不是-1,归避后面数据没有读取问题
		 * 
		 */
	}

总结

今天学了文件操作和IO流,文件其实也是一个对象,从它的构造方法,成员方法学习,掌握的文件/文件夹的创建、重命名、删除等方法,其中涉及到createNewFile() 、mkdir() 、mkdirs()创建多个文件,delect()方法。在获取指定.jpg时,用到了文件的过滤,涉及到接口FilenameFilter,一般通过匿名内部类直接用,很方便。后面学到了IO流,会使用InputStream和OutStream两个抽象类的实现类FileInputStream和FileOutStream的内部方法读取read()和写入write(),最后通过一个案例拷贝图片和音频,能很好的掌握IO流操作,不过在文件有4M的音频拷贝,用常规的一边读一遍写入很慢!

发布了24 篇原创文章 · 获赞 4 · 访问量 611

猜你喜欢

转载自blog.csdn.net/qq_43488797/article/details/103881652