Java-进阶:Java-File-&-IO—1

#目录
一、File 类
二、IO流
三、字节输出流
四、字节输入流
五、字节流文件复制
六、字符输出流
七、字符输入流
八、字符流复制文本文件

##一、File 类
###1. 概述
文件 和 目录路径名 的抽象表达形式
Java中把文件或者目录(文件夹)都封装成 File对象
我们要去操作硬盘上的文件,或者文件夹只要找到 File这个类即可
File类对象,只是路径名的 抽象表示形式,即使该文件在操作系统上并不物理存在,也可以创建这个路径所表示的File对象
###2. 构造方法
File(String pathname):通过给定 路径名字符串 转换为 抽象路径名 来创建一个新 File 实例
windows中的路径或文件名不区分大小写,但是最好别这样,跨平台可能会出现问题
File(String parent, String child):根据 parent 路径名字符串 和 child 路径名字符串,创建一个新 File 实例
好处: 单独操作父路径和子路径
File(File parent, String child):根据 parent 抽象路径名 和 child 路径名字符串,创建一个 File 实例
好处: 父路径是File类型,父路径可以直接调用File类方法

public class Test {
   
    public static void main(String[] args) {
   
        /*
        * File(String pathname)
        * 传递路径名: 可以写到文件夹,可以写到一个文件
        */
        File file = new File("f:\\a.txt");
        System.out.println(file);

        /*
        * File(String parent, String child)
        * 传递字符串父路径,字符串子路径
        */
        File file = new File("f:\\", "a.txt");
        System.out.println(file);

        /*
        * File(File parent, String child)
        * 传递传递File类型父路径,字符串子路径
        */
        File parent = new File("f:");//带不带"\\"都可以
        File file = new File(parent, "a.txt");
        System.out.println(file);
    }
}

###3. File 类成员方法

—创建功能—

public boolean createNewFile():创建文件,如果文件已存在,不再创建
public boolean mkdir():创建单级文件夹,如果文件夹已存在,不再创建
public boolean mkdirs():创建多级文件夹,文件夹已经存在了,不在创建
mkdirs() 也可以创建单级文件夹,所以推荐使用 mkdirs()

—删除功能—

public boolean delete(): 删除文件或者文件夹,不走回收站,直接从硬盘删除!
如果此路径名表示一个目录,则该目录 必须为空 才能删除。

—重命名功能—

public boolean renameTo(File dest): 重新命名文件

—判断功能—

public boolean isFile() :判断File构造方法中封装的路径是不是文件
public boolean isDirectory():判断File构造方法中封装的路径是不是文件夹
public boolean exists(): 判断File构造方法中封装的路径是否存在
public boolean canRead() :读权限
public boolean canWrite() :写权限
public boolean isHidden() :是否隐藏

—基本获取功能—

public String getAbsolutePath():获取绝对路径,返回 String 对象
public File getAbsoluteFile():获取绝对路径,返回 file 对象(推荐使用)
eclipse和 IDEA环境中,写一个相对路径,获取的绝对位置是工程根目录
public String getPath():将抽象路径名转换为字符串(就相当于 toString)
public String getName():返回路径中表示的文件名或者文件夹名 (获取路径中的最后部分的名字)
public long length() :返回路径中表示的文件的字节数(文件夹为 0)
public long lastModified() :上次修改的时间
String getParent(): 获取父路径,返回String对象
File getParentFile(): 获取父路径,返回File对象(推荐使用)
###4. File类高级获取功能
public String[] list()
获取到 File 构造方法中封装的路径中的文件和文件夹名 (遍历一个目录),返回只有名字
如果此抽象路径名不表示一个目录,那么此方法将返回 null
返回的是一个字符串数组
不会递归的获取子目录中的信息(文件或者目录的名称)
public File[] listFiles()
获取到 File 构造方法中封装的路径中的文件和文件夹名 (遍历一个目录),返回的是目录或者文件的 全路径
返回一个 File对象数组
不会递归的获取子目录中的信息(文件或者目录的名称)
注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件

1,指定的目录必须存在
2,指定的必须是目录。否则容易引发 返回数组为null,出现NullPointerException

###5. 文件过滤器
listFiles(FileFilter filter) : 传递 FileFilter 接口的实现类
FileFilter 接口:
必须自定义 FileFilter 接口实现类,重写抽象方法,然后将接口实现类对象传递到遍历方法 listFiles
boolean accept(File pathname) 返回 true 满足条件,回false不满足过滤条件
过滤器中的 accept() 方法接受一个参数,这个参数就当前文件或文件夹对象(全路径)
FilenameFilter接口:
过滤器中的 accept() 接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称
boolean accept(File dir, String name) 返回true满足条件,回false不满足过滤条件
当我们需要过滤文件名称时就可以使用 FilenameFilter 这个过滤器,当我们想对当前文件或文件夹进行过滤,就可以使用 FileFilter
对于一个目录下,文件或文件目录的筛选工作代码:
不变——筛选过程
变化——筛选条件
原理分析
listFiles() 遍历目录的同时,获取到了文件名全路径,调用过滤器的方法 accept(),将获取到的路径传递给 accept(),accept() 方法接收了参数,参数是 listFiles 传递来的,在 accept()方法中,进行判断,如果满足过滤条件,返回true,否则返回false,一旦方法返回了true,listFiles 就将路径保存到 File数组 中
###6. 递归遍历全目录

public class FileDemo {
   
    public static void main(String[] args) {
   
        File dir = new File("E:\\a");
        getAllDir(dir);
    }

    // 定义方法,实现目录的全遍历
    private static void getAllDir(File dir) {
   
        //调用方法listFiles()对目录,dir进行遍历
        File[] fileArr = dir.listFiles();
        for(File f : fileArr){
   
            //判断变量f表示的路径是不是文件夹,是,则递归遍历
            if(f.isDirectory()){
   
                getAllDir(f);
            }else{
   
                System.out.println(f);
            }
        }
    }
}

##二、IO流
###1. 概述
IO流用来处理设备之间的 数据传输
Java对数据的操作是通过 流 的方式
Java用于操作流的对象都在 IO包 中(input/output)
Output操作:把内存中的数据存储到持久化设备上这个动作称为输出(写)
Input操作:把持久设备上的数据读取到内存中的这个动作称为输入(读)
流的分类:
流按流向分为两种:
输出流:内存——>外设(写出数据)
输入流:磁盘——>内存(读入数据)
流按操作类型分为两种:
字节流:字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流:字符流只能操作纯字符数据,比较方便。
###2. IO流常用父类
字节流的抽象父类:InputStream ,OutputStream
字符流的抽象父类:Reader , Writer
##三、字节输出流
###1. 概述
java.io.OutputStream 此抽象类,是表示输出字节流的所有类的超类。操作的数据都是 字节
##2. OutputStream 的核心方法:
void close(): 关闭此输出流并释放与此流有关的所有系统资源。
close的常规协定:该方法将关闭输出流。关闭的流不能执行输出操作,也不能重新打开。
如果流对象建立失败了,需要关闭资源吗?
new 对象的时候,失败了,没有占用系统资源;释放资源的时候,对流对象判断null,变量不是null,对象建立成功,需要关闭资源
write(byte[] b): 将 b.length 个字节从指定的 byte 数组写入此输出流
write(byte[] b, int off, int len):将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
write(int b): 将指定的字节写入此输出流。write 的常规协定:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。
###3. FileOutputStream 类
####(1) 构造方法
FileOutputStream(File file) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append): 创建一个向指定 File 对象表示的文件中写入数据的文件输出流,以追加的方式写入。
FileOutputStream(String name) :创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) :创建一个向具有指定 name 的文件中写入数据的输出文件流,以追加的方式写入。

####(2) 流对象的使用步骤:
创建流子类的对象,绑定数据目的
调用流对象的方法write写
close释放资源
注意事项:流对象的构造方法,可以创建文件,如果文件存在,直接覆盖

public class IoDemo {
   
    public stati
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值