Java-----IO流【文件(File)】

IO流

  • IO流是什么?
    • IO:input 和 output
    • 输入输出流的意思?
      • Java 程序进行数据传输的管道!
      • 流就是管道的意思
    • 流:Stream
  • 显示网络操作中有没有进行数据输入输出的操作?
    • 有:
    • 例如:上网注册信息的时候,对图片信息的上传!—–上传 –输入到程序中 输入流
    • 从网上下载数据的时候,也是数据的传输! —–下载 –输出的操作

文件(File)概述

  • 在计算机中所有的数据都是以文件的格式存储的!
  • 在Java中认为文件是一个对象!!!
  • Java认为所有的东西都是对象!

官方解释:

  • 文件和目录路径名的抽象表示形式。(磁盘上的文件和文件夹都是File类的对象)
  • 文件就是磁盘上的文件在Java语言中的表示对象!
  • class类——对象—>**.class 在内存中的表现形式
  • now类():jvm — class 文件–>class对象
  • File类的对象 就是磁盘上所有的文件 在Java语言中的对象的表现形式。

File类的构造方法

  • File(String pathname):根据一个路径得到File对象

  • File(String parent,String child):根据一个目录和一个子文件/目录得到File对象

  • File(File parent,String child):根据一个父File对象和一个子文件、目录得到File对象

  • 例:

    public static void main(String[] args){
        // File(String pathname); 根据一个路径得到File对象
        // Java中一个“\”代表的是转移字符开始标志,要是想用"\"就必须要有"\\"来表示
        File file1 = new File("D:\\java\\a.txt");
        
        // File(String parent,String child):根据一个目录和一个子文件/目录得到File对象
        // Java中认为文件夹是一种特殊的文件 只不过文件夹中的内容是其它的文件或文件夹,而文件中是数据
        File file2 = new File("D:\\java", "a.txt");
        
        // File(File parent,String child):根据一个父File对象和一个子文件、目录得到File对象
        File file3 = new File("D:\\java");
        File file4 = new File(file3,"a.txt");
    }
    

File 类的成员方法

  1. 创建功能
  2. 删除功能
  3. 重命名功能
  4. 判断功能
  5. 获取功能

创建功能

  • public boolean createNewFile(): 创建文件 如果存在这样的文件,就不创建了

  • public boolean mkdir(): 创建文件夹 如果存在这样的文件夹,就不创建了

  • public boolean mkdirs(): 创建文件夹 如果父文件不存在,会帮你创建出来

  • 例:

    // public boolean createNewFile(): 创建文件 如果存在这样的文件,就不创建了
    File file = new File("D:\\java\\a.txt");
    boolean rst = file.createNewFile();//true
    
    // 如果没有指明创建文件的路径 那么该文件是在项目路径下创建
    File file = new File("a.txt");
    boolean rst = file.createNewFile();//true
    
    // 如果路径不存在能不能创建?不能 java.io.IOException: 系统找不到指定路径。
    // 如果调用改createNewFile()方法的时候 路径必须存在
    File file = new File("D:\\java\\cc\\a.txt");
    boolean rst = file.createNewFile();//false
    
File创建文件夹
  • 例:

    // public boolean mkdir(): 创建文件夹 如果存在这样的文件夹,就不创建了,而且不能创建多重文件夹
    File file = new File("D:\\javase\\JavaWeb");
    boolean rst = file.mkdir();
    // public boolean mkdirs(): 创建文件夹 如果父文件不存在,会帮你创建出来
    // 这个方法则可以创建多重文件夹
    boolean ret2 = file2.madirs();
    
    File file2 = new File("jjjjj");// 如果不填路径,且不知道是文件夹还是文件的情况下
    boolean rst3 = file.mkdir();// 如果调用【mkdir】这样会直接创建到项目路径里,出现的是文件夹
    boolean rst4 = file.creatNewFile();// 如果调用【creatNewFile】这样会直接创建到项目路径里,出现的是文件
    
    

删除功能

  • 例:

    // public boolean delete(); 可以用来删除文件和文件夹
    File file = new File("jjjjj");
    file.delete(); 
    // aaaaa下面还有文件夹 没有删除成功
    // 注意:delete删除的文件夹下面不能有文件或文件夹
    File file2 = new File("D:\\java\\jjjjj");
    boolean delete2 = file2.delete();
    System.out.println(delete2); 
    

重命名功能

  • public boolean renameTo(File dest); 可以给文件或者文件夹改名字

  • 例:

    File file = new File("a");
    File file2 = new File("b");
    File file3 = new File("c.txt");
    
    file.mkdir();
    file2.mkdir();
    file3.createNewFile();
    
    // 把a和b改成aa和bb
    File file4 = new File("aa");
    file.renameTo(file4);
    
    File file5 = new File("bb");
    file2.renameTo(file5);
    
    // c.txt改成cc.txt
    file3.renameTo(new Fele("cc.txt"));
    
    // 移动文件夹
    File file4 =new Flie("cc.txt");
    file4.renameTo(new File("D:\\javase\\ccccc.txt"));
    

判断功能

  • public boolean isDirectory(); 判断是否是目录

  • public boolean isFile(); 判断是否是文件

  • public boolean exists(); 判断是否存在

  • public boolean canRead(); 判断是否可读

  • public boolean canWrite(); 判断是否可写

  • public boolean isNidden(); 判断是否隐藏

  • 例:

    File file = new File("a");
    File file2 = new File("b");
    File file3 = new File("c.txt");
    
    // public boolean isDirectory(); 判断是否是目录
    boolean rst = file.isDirectory();
    System.out.ptintln(rst);
    
    // public boolean isFile(); 判断是否是文件
    rst = file3.isFile();
    System.out.ptintln(tst);
    
    // public boolean exists(); 判断是否存在
    rst = file3.exists();
    System.out.println(rst);
    
    // public boolean canRead(); 判断是否可读
    rst = file.canRead();
    System.out.println(rst);
    
    // public boolean canWrite(); 判断是否可写
    rst = file.canWrite();
    System.out.println(rst);
    
    // public boolean isNidden(); 判断是否隐藏
    File file5 = new File("D:\\javase\\Record\\ccccc.txt");
    rst = file5.isNidden();
    System.out.println(rst);
    

获取功能

  • public String getAbsoluteBath(); 获取绝对路径

  • public String getPath(); 获取相对路径

  • public String getName(); 获取名称

  • public long length(); 获取长度,字节数

  • public long lastModified(); 获取最后一次的修改时间,毫秒数

    • 相对路径:相对于当前项目的路径
    • 绝对路径:文件在系统磁盘上的路径,从盘符开始,一直到文件/文件夹的名称就叫做绝对路径。
  • public String[] list(); 获取指定目录下的所有文件或者文件夹的名称数组

  • public File[] listFiles(); 获取指定目录下的所有文件或者文件夹的File数组

  • 例:

    // 下面的文件的路径都是相对路径
    // 都是相对于当前的项目的路径
    File file = new File("aa");
    File file2 = new File("bb");
    File file3 = new Flie("c.txt");
    
    // 下面的是绝对路径,从磁盘的盘符位置开始
    File file4 = new File("D:\\javase\\Record\\ccccc.txt");
    
    // public String getAbsolutePath(); 获取绝对路径
    String absolutePath = file.getAbsolutePath();
    System.out.println(absolutePath);
    System.out.println(file3.getAbsolutePath());
    
    // public String getPath(); 获取相对路径
    String path = file.getPath();
    System.out.println(path);
    
    File file5 = new File("aa//c.txt");
    System.out.println(file5.getPath());
    
    // public String getName(); 获取名称
    // 不带路径 只有文件或者文件夹的名称
    System.out.println(file.getName);
    System.out.println(file4.getName);
    
    // public long length(); 获取长度,字节数
    // 文件夹的长度总是0
    System.out.println(file.length());
    // 文件的长度
    System.out.println(file3.length());
    
    // public long lastModified(); 获取最后一次修改时间,毫秒数
    long time = file.lastModified();
    Date d = new Date(time);
    System.out.println(d.toLocaleString());
    
    File file = new File("D:\软件");
    // public String[] list(); 获取指定目录下的所有文件或者文件夹的名称数组 
    String[] names = file.list();
    for(String string : names){
        System.out.println(string);
    }
    
    // public File[] listFiles(); 获取指定目录下的所有文件或者文件夹的File数组
    File[] listFiles = file.listFiles();
    for(File file2 : listFiles){
        System.out.println(file2.getAbsolutePath());
    }
    

File类练习

  • 判断盘符里 目录下是否有后缀名为 .png 的文件,就输出此文件的绝对路径

    // 分析:1. 把要搜索的目录包装成File对象
    //      2. 得到该文件夹下所有的文件对象
    //      3. 判断每个文件名的是否以png结尾,如果是就打印出来
    public static void main(String[] args) {
            // 判断盘符里 目录下是否有后缀名为 .png 的文件,就输出此文件的绝对路径
            File file = new File("D:\\学习\\tupian");
            File[] file2 = file.listFiles();
            for (File file3 : file2){
                String name = file3.getName();
                if(name.endsWith(".png")){
                    String path = file3.getAbsolutePath();
                    System.out.println(path);
                }
            }
        }
    
  • 批量改文件的名字,把文件夹中类似于文件名,“零基础学Java_001_IO流概述”改成“001_IO流概述”

    // 分析:
    //     A:得到所有的文件对象(把所有要改名字的文件编程File对象)
    //		1、得到所在文件的目录
    //		2、通过对这个目录进行File对象的包装,得到他下面的所有的File对象(listFiles)
    //	  B:遍历所有的文件对象,在遍历的过程中对文件进行改名(renameTo)
    //	改名字的步骤:
    //		1、得到原来文件的名字(getName)
    //		2、对原来文件中的名字进行提取(字符串内容截取,substring)
    //			原:零基础学Java_001_IO流概述
    //			现在:001_IO流概述
    //			截取之后拼接成一个新名字
    //		3、改名
    //			利用原来该文件所在的文件路径+新名字,构建一个新的File对象
    // 			原来的文件对象.renameTo(构造的新的File对象).
    public static void main(String[] args){
        // 文件所在的目录
        File file = file = new File("");
        // 得到所有的文件对象
        File[] files = file.listFiles();
        // 遍历files,在遍历的过程中改名
        for(File file2 : files){
            // 得到文件名
            String name = file2.getName();
            //System.out.println(name);
            // 零基础学Java_001_IO流_IO流概述.mp4
            int start_ = name.indexOf("_");
            String first = name.substring(start_+1,start_+4);
            int end_ = name.lastIndexOf("_");
            String last = name.substring(end_);
            // 新文件名字
            String newName = first+last;
            // 对file2进行重命名,就要创建一个新的File对象
            File newFile = new File(file,newName);
            file2.renameTo(newFile);
        }
    }
    

IO流的分类

  • 流向:(不管是输入流还是输出流都是相对于你当前的程序而言的)
    • 输入流(读 read)input
    • 输出流(写 write)output
  • 传输的内容分:
    • 字节数据:图片、音频、视频
      • 字节输入流:InputStream
      • 字节输出流:OutputStream
    • 字符数据:abcd
      • 字符输入流:Reader
      • 字符输出流:Writer
  • 不管是字节流还是字符流,底层流动的都是字节!

IO体系结构

  • IO流
    • 字节流
      • 字节输入流
        • InputSteam
          • FileInputStream处理文件的字节输入流
      • 字节输出流
        • OutputStream
          • FileOutputStream处理文件的字节输出流
      • 字符流
        • 字符输入流
          • Reader
            • FileReader处理文件的字符输入流
        • 字符输出流
          • Writer
            • FileWriter处理文件的字符输出流
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值