File类详解【23/11/20】

目录

一 File类概述

二 File类常用方法

 

三 File常用方法2

四 File类遍历

五 非规律化递归问题:文件搜索

六 编码和解码

 


一 File类概述

import java.io.File;

/**
 * File类:定位文件,进行删除,获取文本本身信息等操作,但是不能读写文件内容
 *       
 * IO流  : io流技术可以对硬盘中的文件进行读写
 * 
 * 总体学习思路: 先学会使用File类定位以及操作文件本身,然后学习io流读写文件数据
 * 
 *                (File类使用--->方法递归--->字符集--->io流的作用,分类)
 * 
 * @author 黄佳乐
 *
 */
public class Main {

    public static void main(String[] args) {
        
      /**File类概述
       * 
       * 1: File类在包java.io.File下,代表操作系统的文件对象(文件,文件夹)
       * 2: File类提供了诸如:定位文件,获取文件本身的信息,删除文件,创建文件(文件夹)等功能
       * 
       * */
        
        /**===============1:创建File类对象===============================*/
        
        File f = new File("D:\\英雄时刻\\1203764531\\英雄时刻_20180916-17点56分31s.avi") ; 
        //双引号中间写的是这个文件的路径(在计算机找到所需的文件-->右键该文件-->属性-->安全-->对象名称后面的就是该文件路径)
        
        long size = f.length();  //获取文件字节大小
        
        System.out.println(size);  //37977272
        
        /** ===============2 :File类创建对象支持绝对路径并且支持相对路径(重点!!!)=============*/
        
        //绝对路径就是上面的那一种方法,直接把该文件在你电脑里的位置放进来,但是如果在不同的电脑上呢?放文件的位置就可能不一样,所以就用到了相对路径
        
        /**
         * 总的来说呢,就是先在src里面创建一个file,然后....写成下面这样,但是运行不了 ,不知道错在哪里,
         * 按道理应该是6个字节,可是打印出来是0,算了不管了。先学会绝对路径就行了
         */
        
        File f2 = new File("file-io-app/src/date") ; 
        
        System.out.println(f2.length());
        
        //========================================================
        
        f.delete() ; //删掉f这个文件,我试一下,看一下能不能真的把我电脑上面的这个文件给删掉,嘻嘻~
        
        //卧槽!!!牛逼,我电脑上的这个文件真的被删了!叼,不知道还能不能找回来啊。。
        
        //=======================================
        
        boolean r = f.exists() ; //判断f这个文件路径存不存在,存在返回true,否则反之(f文件被我删掉了,所以是false)
        
        System.out.println(r) ; 
        
        File f3 = new File("D:\\360Downloads") ;  //重新创一个试一下
        
        System.out.println(f3.exists()) ; //true(奈斯)  
    }

}
 

二 File类常用方法

import java.io.File;
import java.text.SimpleDateFormat;

/**
 * File类常用API:
 * 
 * @author 黄佳乐
 *
 */
public class Main{
    public static void main(String[] args) {
        
        // 1: 绝对路径创建一个文件对象
        File f1 = new File("C:\\Users\\黄佳乐\\Desktop\\Pictures (1)\\915220_171122043_2.jpg") ;
        
        // 2: 获取它的绝对路径
        System.out.println(f1.getAbsolutePath()) ; //因为我上面用的就是绝对路径,所以打印出来的路径和上面一样
        
        //打印内容  --->  C:\Users\黄佳乐\Desktop\Pictures (1)\915220_171122043_2.jpg
        
        // 3: 获取文件定义的时候使用的路径
                System.out.println(f1.getPath());  // C:\Users\黄佳乐\Desktop\Pictures (1)\915220_171122043_2.jpg
                
        // 4: 获取文件的名称(带后缀)
        System.out.println(f1.getName());  //  915220_171122043_2.jpg
        
        // 5:获取文件的大小(字节个数)
        System.out.println(f1.length());  // 157735
        
        // 6: 获取文件的最后修改时间
        long time = f1.lastModified() ; 
            //此时这个时间time并不是我们所熟悉的时间格式,所以在打印出来的时候,我们还需要对时间格式化
        System.out.println("格式化后的时间为"+new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time)) ; 
            //格式化后的时间为2020/08/27 16:52:16
        
        // 7: 判断该文件路径是否存在
        System.out.println(f1.exists()) ; //true
        
        // 8: 删除该文件(delete)
        
        /**这个可不兴乱用啊*/
        
    }
}

 
三 File常用方法2

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;

/**
 * File类常用API2:
 * 
 * @author 黄佳乐
 *
 */
public class Main{
    public static void main(String[] args) throws IOException {
        
        File f1 = new File("D:\\aaa\\date.tax") ;
        
        // 1: 创建一个新文件,成功返回true,否则反之
        System.out.println(f1.createNewFile()) ;  //true(这个系统怕你出错,所以需要丢出异常)
        /**这个表示在文件D盘下的aaa文件下创建一个date.text文件
         * 返回为true,这说明date文件创建成功
         * 当然了,如果这个文件已经有了,就不创建了
         */
        
        // 2: mkdirs创建多级目录(重点)
        File f2 = new File("D:/aaa/bbb/ccc") ;
        System.out.println(f2.mkdirs()) ;   //true
        /**
         * 这个表示我在D盘中的aaa文件里面创建了一个bbb文件里面再创建了一个ccc文件的这样一个二级目录(可以更多级)
         * 返回为true,表示创建成功
         * 另外还有一个mkdir只能创建一级目录,所以一般不用它
         * 
         */
        
        // 3: delete只能删除空文件夹,不能删除非空文件夹
           /**我们在前面将的是delete删除的是文件,而这里是删除文件夹*/
        File f3 = new File("D:/aaa") ; 
        System.out.println(f3.delete()) ; //false
        /**
         * 这里返回的是false,不能删除,因为我要删除的f3文件是D盘里面的aaa文件,但是aaa文件还有其它东西,所以不能删
         * 
         */
        
        //重新删一个空的文件夹
        File f4 = new File("D:/aaa/bbb/ccc") ; //true
        /**
         * d盘里面的aaa文件夹里面的bbb文件夹里面的ccc文件夹是我上面创建的,而里面什么都没有,所以可以删
         * 返回的是true,删除成功
         */
        
    }
}

四 File类遍历

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;

/**
 * File类遍历:
 * 
 * @author 黄佳乐
 *
 */
public class Main{
    public static void main(String[] args) throws IOException {
        
        /**==============遍历方法一===============*/
        
        // 1 :先定位一个你需要遍历目录
        File f1 = new File("D:/aaa") ; 
        
        // 2: 将aaa文件夹全部转化为数据元素存储在一个数组里面
        String [] names = f1.list()  ;
        
        //3 ;开始遍历数组
        for(String name : names) {
            System.out.println(name) ; 
         }
            /**
             *   打印内容:
             * bbb
               date.tax
               
              因为这个只能遍历一级目录,所以虽然bbb文件夹里面还有,但是也遍历不到
             */
            
         /**=================遍历方法二===============*/
            
            // 1 : 获取当前对象目录下的所有“一级文件对象”到一个文件对象数组中去返回(重点)
            
               //先将所有对象文件存在一个文件数组中去
              File[] files = f1.listFiles() ; 
               
              //然后再遍历这个文件数组
              for(File f : files) {
                  System.out.println(f.getAbsolutePath()) ; //这个得到的是他的一级文件对象的路径
                  
              }
              
              System.out.println(Arrays.toString(files)) ;  //files数组里面存放的全是路径
              
              //那么我们再看看前面的那个names数组,以此来比较一下这两个的区别
              
              System.out.println(Arrays.toString(names)) ;  //这个names数组里面存放的就是文件名称
              
              /** listFiles()的注意事项:
               * 1:当调用者不存在时,返回的时null(直接打印File类数组的名称)
               * 2:当调用者是一个文件时,返回的是null
               * 3:当调用者是一个空文件夹时,返回的是一个长度为0的数组
               * 4:当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回(如上代码)
               * 5: 当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
               * 
               */
    }
}

五 非规律化递归问题:文件搜索

import java.io.File;

/**
 * 非规律化递归问题:寻找文件路径。
 * 
 * @author 黄佳乐
 *
 */
public class Main{
    public static void main(String [] args) {
        //将寻找文件的代码专门用一个方法来实现
        
        //传入目录和文件名称(目录是你需要找的文件放在哪个盘里面,文件名称就是你要找的文件的名称)
        
        searchFile(new File("D:/"),"找的文件.exe") ; //目录可以理解为路径,就是new一个File类,在加上路径
    }

    
    //寻找文件方法
    private static void searchFile(File dir, String fileName) {
        // TODO Auto-generated method stub
        
        //1: 判断提供的文件目录是不是一个目录,也有可能别人乱输入的 
        if(dir != null && dir.isDirectory())  //如果dir不是空字符并且dir是一个目录
        {
            //满足条件的话就可以开始找了
            
            /**先讲一下寻找的大概思路吧:
             * 
             * 1:我给的目录是D盘,那么我肯定要先遍历D盘目录下的所有一级文件对象,
             * 2:然后我就要一一判断所有的以及文件对象哪些是文件,哪些是文件夹,
             * 3:如果是文件的话,那么我就要把它和我要找的文件进行比较,看是不是我要找的文件。
             * 4:如果它是一个文件夹的话,那么我又要进入这个文件夹里面,和上面一样,继续遍历所有的文件对象,要判断是文件还是文件夹
             * 5:当我在讲到上一步的时候,其实就是开始重复上面的操作了,那么我们就可以用递归来解决这个问题了,这也就是本节的主要内容了。
             * 
             * 
             */
            
            //既然要遍历,那么肯定要先把目录里面的内容装到数组里才能遍历了
            File[] files = dir.listFiles() ; 
            
            //判断数组里面是否存在一级文件对象
            if(files != null && files.length>0) //如果数组里面有文件对象并且装的不是空字符才可以进行寻找
            {
                //进行遍历寻找
                for(File f : files)
                {
                    //判断当前遍历到的文件对象是文件还是文件夹
                    
                    if(f.isFile()) //如果遍历到的文件对象是一个文件,那么就要判断它是不是我们要找的文件
                    {
                        if(f.getName().contains(fileName)) //这里用了模糊比较contains,只要有相同的内容就找出来,没有用equals是因为用户输入的名称可能会有写偏差,不可能每一字都输入正确
                        {
                            System.out.println("找到了文件: "+f.getAbsolutePath()) ;
                        }
                    }
                    else  //如果找的不是文件,而是一个文件夹的话,那么又要重复上面的操作,那么直接调用 自身函数就行了,也就是“递归”
                    {
                        //现在的文件目录就是当前找到的文件夹路径,而我们需要寻找的文件名称还是不变的
                        searchFile(f.getAbsoluteFile(),fileName) ;
                        
                        /**ok!完美的代码在这里就结束了 !!!*/
                    }
                }
            }
            
        }
        else
        {
            System.out.println("对不起,您当前搜索的位置不是文件夹!");    
        }
            
    }
}

六 编码和解码

import java.util.Arrays;

public class Main{
    public static void main(String [] args) {
        
        String r = "我爱你中国abc" ;  //创建字符串
        
        byte[] rs = r.getBytes() ;  //编码:把文字转成字节,因为有很多字节,所有用byte数组来存储他们的字节
        
        
        
        System.out.println(rs.length) ; //因为这默认的是UTF-8编码,所有一个中文三个字节,一个英文单词一个字节,所以总共有五个中文和三个英文,也就是13个字节
        
        System.out.println(Arrays.toString(rs)) ; //打印的就是他们的编码,中文开头是负数,所以系统知道往后读三个字节。
        
        //2:解码(把字节转化成对应的中文形式。编码前和编码后的字符集必须一致,也就是你用的UTF-8编码也必须用UTF-8解码)
        
        String st = new String(rs) ;  //这个就是解码的方式,默认的字符集就是UTF-8 
        
        System.out.println(st)  ;//我爱你中国abc
    }
}

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值