day18
File类和io流
File类只能对文件本身进行操作,不能读写文件里面存储的数据。
File:代表文本
Io流:读写数据
File类对象的创建
构造器 | 说明 |
---|---|
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径和子路径名字创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径名字创建文件对象 |
-
注意事项:实际开发中路径的定义使用的都是/(左斜杠)mac、linux只支持左斜杠
-
File对象即可以代表一个文件,也可以代表文件夹
-
file封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的
绝对路径、相对路径
- 绝对路径:从盘符开始,确定时候不会发生改变
- 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件
file提供的判断文件类型、获取文件信息功能
方法名称 | 说明 |
---|---|
public boolean exists() | 判断当前文件对象,对应的文件路径是否存在,存在返回true |
public boolean isFile() | 判断当前文件对象指代的是否是文件,是文件返回true,反之。 |
public boolean isDirectory() | 判断当前文件对象指代的是否是文件夹,是文件夹返回true,反之。 |
public String getName() | 获取文件的名称(包含后缀) |
public long length() | 获取文件的大小,返回字节个数 |
public long lastModified() | 获取文件的最后修改时间。 |
public String getPath() | 获取创建文件对象时,使用的路径 |
public String getAbsolutePath() | 获取绝对路径 |
File类创建和删除文件的功能
方法名称 | 说明 |
---|---|
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 只能创建一级文件夹 |
public boolean mkdirs() | 可以创建多级文件夹 |
方法名称 | 说明 |
---|---|
public boolean delete() | 删除文件、空文件夹 |
注意:如果删除的是文件夹,只能删除空文件夹,不走回收站
File类提供的遍历文件夹的功能
方法名称 | 说明 |
---|---|
public String[] list() | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。 |
public File[] listFiles() | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点) |
注意事项
- 当主调是文件,或者路径不存在时,返回null
- 当主调是空文件夹时,返回一个长度为0的数组
- 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
- 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
- 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null
递归:
递归函数通常需要定义一个基本情况和一个或多个递归情况。当递归情况被调用时,它会通过不断调用自身来解决问题,直到最终达到基本情况并返回结果。
方法调用自己的形式称为方法递归
递归遍历文件
public static void findFile(File f,String obj){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
if (!f.exists()) return ;
if (f.isFile()&&f.getName().contains(obj)){
System.out.println(f.getName()+ " "+f.getAbsolutePath()+" "+f.length()+" "+sdf.format(f.lastModified()));
return;
}
if (f.isDirectory()) {
File[] files = f.listFiles();
if (files == null) return;
for (File file : files) {
findFile(file,obj);
}
}
}
注意事项
- 隐藏文件也能获取到
- 如果主调代表的文件夹不存在,或者需要权限才能访问,返回null
- 如果主调代表的文件夹是空文件夹,返回长度为0的空数组
编码
Java代码完成对字符的编码
String提供了如下方法 | 说明 |
---|---|
byte[] getBytes() | 使用平台的默认字符集将该 String编码为一系列字节,将结果存储到新的字节数组中 |
byte[] getBytes(String charsetName) | 使用指定的字符集将该 String编码为一系列字节,将结果存储到新的字节数组中 |
Java代码完成对字符的解码
String提供了如下方法 | 说明 |
---|---|
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的 String |
String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来构造新的 String |
IO流
用来读写数据
按照流的方向
- I指的是input,称为输入流:负责把数据读到内存中去,即输入到内存
- o代表output,称为输出流:负责写数据到硬盘,即内存输出到硬盘
按流中数据的最小单位,分为:
- 字节流:适合操作所有类型的文件
- 字符流:只适合操作纯文本文件
综上所述:
- 字节输入流 InputStream(读字节数据的)
- 字节输出流 OutoutStream(写字节数据出去的)
- 字符输入流 Reader(读字符数据的)
- 字符输出流 Writer(写字符数据出去的)
FileInputStream(文件字节输入流)
作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。
构造器 | 说明 |
---|---|
public FileInputStream(File file) | 创建字节输入流管道与源文件接通 |
public FileInputStream(String pathname) | 创建字节输入流管道与源文件接通 |
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果发现没有数据可读会返回-1. |
public int read(byte[] buffer) | 每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1. |
使用read()读取时注意:
- 流使用完毕之后,必须关闭,释放系统资源。
- 读取数据的性能很差,因为每次都只读取一个字节
- 读取汉字输出会出乱码,无法避免(因为中文不止一个字节)
文件字节输入流:一次读取完全部字节
方式一:自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。
方法名称 | 说明 |
---|---|
public int read(byte[] buffer) | 每次用一个字节数组去读取,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1. |
方式二:Java官方为InputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回。
方法名称 | 说明 |
---|---|
public byte[] readAllBytes() throws IOException | 直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回 |
FileOutputStream(文件字节输出流)
作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。
构造器 | 说明 |
---|---|
public FileOutputStream(File file) | 创建字节输出流管道与源文件对象接通 |
public FileOutputStream(String filepath) | 创建字节输出流管道与源文件路径接通 |
public FileOutputStream(File file,boolean append) | 创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath,boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
方法名称 | 说明 |
---|---|
public void write(int a) | 写一个字节出去 |
public void write(byte[] buffer) | 写一个字节数组出去 |
public void write(byte[] buffer , int pos , int len) | 写一个字节数组的一部分出去。 |
public void close() throws IOException | 关闭流。 |
任何文件的底层都是字节,字节流做复制,是一字不漏的转移完全部字节,只要复制后的文件格式一致就没问题!
标签:文件,String,文件夹,File,day18,public,字节 From: https://www.cnblogs.com/xkh-blogs/p/17230952.html