侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

文件处理

coydone
2021-02-20 / 0 评论 / 0 点赞 / 293 阅读 / 7,813 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

File

概述

File类:File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。

概念:对文件和文件夹(目录)的统称。

作用:操作文件和文件夹(操作指:创建、删除、获取)。

File类的静态字段

import java.io.File;
/*
 *File类的静态字段
 * static String pathSeparator:代表当前操作系统的路径分隔符,
 * pathSeparator是以字符串的形式表示
       例如:当前widows系统路径分隔符";"
 static char pathSeparatorChar:代表当前操作系统的路径分隔符,
 * pathSeparatorChar是以字符的形式表示
        例如:当前widows系统路径分隔符';'

 static String separator:代表当前操作系统的名称分隔符
 * separator是以字符串的形式表示
         例如:当前widows名称分隔符"\\"
 static char separatorChar:代表当前操作系统的名称分隔符
 * separator是以字符的形式表示
         例如:当前widows名称分隔符'\\'
 */
public class Demo01 {
    public static void main(String[] args) {
        //如path环境变量 c:/jdk;c:windows
        System.out.println(File.pathSeparator);//";"代表当前操作系统中的路径分隔符
        System.out.println(File.pathSeparatorChar);//';'//字符类型;不同的操作系统执行这段代码,打印出来的而结果不同
        //因为不同操作系统的路径分隔符不同,说明java跨平台
        //"c:\1.txt"+File.pathSeparator+"d:\a.doc"
         
        //磁盘路径分隔符
        System.out.println(File.separator);// "\" 代表路径中的名称分隔符
        //widnows在路径中以\(反斜杠)来分隔名称
        //d:\abc\1.txt
        System.out.println(File.separatorChar);//'\'
        System.out.println("\\"); //两个\\代表一个普通的\字符
    }
}

相对路径与绝对路径

绝对路径:文件或文件夹的路径中以盘符开头就是绝对路径(唯一路径)。

一旦项目位置发生变化,代码可能会引起异常:找不到文件的异常,例如:D:\1.txt ;E:\abc\2.txt

相对路径:其中一个文件与另外一个文件相对关系,一定会有一个参照物。不会因为项目的位置发生变化,而引起代码中路径书写的变化。

例如:

2.txt的相对路径,参照物绝对路径:F:\JavaBaseCourse\JavaSEProject\day
2.txt的绝对路径:F:\JavaBaseCourse\JavaSEProject\day\src\2.txt
2.txt的相对路径:src\2.txt

File类的构造函数

File(File parent,String child):根据parent抽象路径名和child路径名字符串创建一个新的File实例。

File(String pathname):通过将给定路径名字字符串转换为抽象路径名来创建一个新File实例。

File(String parent,String child):根据parent路径名字符串和child路径名字符串创建一个新File实例。

URI和URL

URL:http://www.baidu.com 统一资源定位符,万维网上的一个唯一访问地址。

URI:包括url,和本地的一个磁盘路径D:\aa\2.txt

import java.io.File;
/*File类中的构造方法
    File(String pathname):传入一个路径字符串来构造一个File对象
    File(String parent, String child):传入一个parent(一般穿路径不包含文件名)和一个child(文件或文件夹名字),
    最终底层还是把parent和child做一个拼接,成为一个完整的路径
    File(File parent, String child):传入一个parent的File对象(一般穿路径不包含文件名)和一个child(文件或文件夹名字),
    最终底层还是把parent和child做一个拼接,成为一个完整的路径
*/
public class Demo02 {
    public static void main(String[] args) {
        method();
        //method02();
        //method03();
    }

    private static void method03() {
        // File(File parent, String child)
        File parent=new File("E:\\");
        String child="abc\\后来.txt";

        File f=new File(parent,child);//第一个参数为File类型,因为我们有可能对parent这个路径
        //想调用File类的方法
        System.out.println(f);//E:\abc\后来.txt
    }

    private static void method02() {
        //File(String parent, String child)
        File f=new File("d:\\","2.txt");//第一个参数我们一般传入一个路径但是不包含文件或文件夹
        //第二个参数我们一般写文件或文件夹的名称
        //底层还是把parent和child拼接一块作为一个完整路径
        System.out.println(f);//d:\\2.txt
    }

    private static void method() {
        //File(String pathname)
        File f=new File("F:\\1.txt");//传入的是
        //1.txt文件的绝对路径
        //File对象就代指硬盘1.txt文件
        System.out.println(f);//打印的就是File构造函数中封装的路径
        File f2=new File("M:\\2.txt");//new File的时候不会去检测这个路径在硬盘是否真正存在
        System.out.println(f2.getAbsolutePath());//绝对路径
    }
}
import java.io.File;
import java.util.ArrayList;
import java.util.List;
//判断文件类型,如是不是图片
public class Demo03 {
    public static void main(String[] args) {
        File file = new File("src\\com\\Demo.java");
        String fileName = file.getName();
        System.out.println("文件名:"+fileName);//Demo.java
        //获取后缀名
        String lastName = fileName.substring(fileName.lastIndexOf('.') + 1);//java
        System.out.println(lastName);
        //list集合存储图片格式
        List<String> list = new ArrayList<>();
        list.add("jpg");
        list.add("jpeg");
        list.add("gif");
        System.out.println("是不是图片文件:"+list.contains(lastName.toLowerCase()));//false
    }
}

File类的创建

创建文件

import java.io.File;
import java.io.IOException;

//File类的创建功能:利用File类的方法创建文件或文件夹
//创建文件:boolean createNewFile()
//  利用File对象中封装的文件路径,把这个文件创建出来
//  如果当前文件创建成功,返回true,如果当前文件已存在则不再创建,返回false
//  如果传入一个不存在路径直接抛异常java.io.IOException,系统找不到指定的路径
//  只能创建文件
public class Demo {
    public static void main(String[] args) throws IOException {
        //boolean createNewFile()
        //1.创建一个File对象
        File f = new File("d:\\1.txt");//File对象中封装的是1.txt路径
        //2.调用createNewFile()创建出1.txt
        boolean b = f.createNewFile();//创建了一个无内容的1.txt文件      
        //打印返回值
        System.out.println(b);//true    
         
     /*  File f2=new File("M:\\2.txt");
         boolean b2=f2.createNewFile();
         System.out.println(b2);*/


        File f3 = new File("f:\\新建文件夹");
		//不能创建文件夹创建出来的是一个名字叫做 新建文件夹文件
        boolean b3 = f3.createNewFile();
        System.out.println(b3);
    }
}

创建文件夹

/*
 *File类创建目录(文件夹)功能
 *  boolean mkdir():mkdir是 make directory
 *                  根据File对象中的路径创建目录
 *                  如果创建成功返回true,
 *                  创建失败返回false
 *                  注意:mkdir()只能创建单级文件夹
 *  boolean mkdirs():可以创建单级或多级文件夹,其它的特点跟mkdir一样
 *                  如果创建成功返回true,创建失败返回false
 */

File类的删除

/*
 *File的删除功能:
 *  boolean delete():
 *     删除文件或文件夹,如果删除成功返回true,如果删除失败返回false;
 *     注意:
 *      1.delete()删除的文件不走回车 shift+delete
 *      2.delete()如果删除文件夹,要求这个文件夹必须为空才能删掉
 *
 */

File类的判断

boolean exists():测试指定的文件或文件夹在硬盘上是否真的存在,如果存在返回true
boolean isDirectory():判断指定的路径是否是一个目录,如果是返回true
boolean isFile():判断指定的路径是否是文件,如果是返回true,否则返回false

File类的获取

创建完了File对象之后,那么File类中都有如下常用方法,可以获取文件相关信息。

File类的获取功能:不管路径在硬盘是否真的存在
String getPath():创建File对象的时候,传入了什么路径,getPath最终就返回什么路径
String getAbsolutePath():无论传入什么路径,返回的都是绝对路径
File getAbsoluteFile():跟上面功能相同,只不过将返回的绝对路径封装成一个File对象
    如果返回的路径还想要使用File类的方法,就选用 File getAbsoluteFile()功能
String getParent():获取的是父级路径(除了最后一级路径之前的路径)
File getParentFile():获取的是父级路径(除了最后一级路径之前的路径),
	但是返回的是一个File对象,还可以使用File类中的方法
String getName():获取最后一级路径的名称
long length():返回文件的字节大小 

方法示例

import java.io.File;
import java.io.IOException;
//创建:G:\\com\\coydone\\1.txt
public class Demo04 {
    public static void main(String[] args) throws IOException {
        File file = new File("G:\\com\\coydone");
        //判断要创建文件或目录是否存在
        if (!file.exists()){
            boolean flag = file.mkdirs();
            System.out.println(flag);
        }
        //在G:\\com\\coydone下创建1.txt
        File txt1 = new File(file,"1.txt");
        if (!txt1.exists()){
            boolean flag = txt1.createNewFile();
            System.out.println(flag);
        }
    }
}

list()/listFiles()

获取一个目录中的所有文件或者目录中的文件夹,一个目录中可能有多个文件或者文件夹,那么如果File中有功能获取到一个目录中的所有文件和文件夹,那么功能得到的结果要么是数组,要么是集合。

File类两个获取功能: 
String[] list():只获取当前文件夹下所有的文件或文件夹(不包含子文件夹下的内容) 
    如果传入的是一个文件路径,直接返回null
    无论使用相对路径还是绝对路径,最终返回的字符串数组中存储的都是文件或文件夹名称
        
File[] listFiles():只获取当前文件夹下所有的文件或文件夹(不包含子文件夹下的内容) 
    如果传入的是绝对路径,那么获取的该文件夹下的文件或目录也是绝对路径
    如果传入的是相对路径,那么获取的该文件夹下的文件或目录也是相对路径
    如果传入的是一个文件路径,直接返回null

递归

递归概述

/*
 *递归:方法自身调用自身
 *递归容易出现的问题:
 *  Exception in thread "main" java.lang.StackOverflowError:栈内存溢出
 *
 *  递归一般都有出口,递归效率不高,因为入栈和弹栈消耗内存资源
 */
public class Demo {
    public static void main(String[] args) {
        method();
    }
    public static void method(){
        method();
    }
}

递归求阶乘

/*分别利用循环和递归求某一个数的阶乘
 * 0!=1
 * 1!=1
 * 2!=2*1=2
 * 3!=3*2*1=6    1*2*3
 *
 * 1!=1
 * 2!=2 * 1!
 * 3!=3 * 2!
 */
public class Demo {
    public static int getJieCheng1(int n){
        int sum=1;//累计求积的结果
        for(int i=1;i<=n;i++){
            sum=sum*i;//当n为3的时候:第一次循环sum=1*1
            //第二次循环:sum= 1 * 2=2
            //第三次循环:sum= 2 * 3=6
        }
        return sum;
    }
 
    public static int getJieCheng2(int n){
        if (n==0||n==1){
            return 1;
        }
        return n*getJieCheng2(n-1);
    }
 
    public static void main(String[] args) {
        System.out.println(getJieCheng1(4));
        System.out.println(getJieCheng2(4));
    }
}

递归显示文件目录中所有文件名

import java.io.File;
public class Demo{
    public static void main(String[] args) {
        File otherFile = new File("G:\\Program Files (x86)");
        showFileName(otherFile);
    }
    public static void showFileName(File otherFile){
        File[] files = otherFile.listFiles();
        for (File file : files) {
            //文件输出文件名
            if (file.isFile()){
                System.out.println(file.getName());//文件夹
            }
            //如果是文件夹,遍历下面的文件
            if (file.isDirectory()){
               showFileName(file);
            }
        }
    }
}

递归显示文件目录中文件的所有路径

import java.io.File;
public class Demo {
    public static void main(String[] args) {
        printFilePath(new File("G:\\Program Files (x86)"));
    }
    //形参定义成file是为了利用File类中的方法
    public static void printFilePath(File dir){
        //1.获取传递过来的目录下的所有的文件或文件夹(不包含子目录下的文件或文件夹)
        File[] fileOrDirs = dir.listFiles();
        //2.遍历这个数组
        for (File f : fileOrDirs) {
            //3.判断当前的file对象是文件还是文件夹
            if(f.isFile()){//判断是文件我们就直接打印它的路径
                System.out.println(f);
            }else{//说明是文件夹
                //继续获取该文件夹下的内容,仍然是调用listFiles方法,循环遍历
                //跟我们上面的代码重复,或者说跟printFilePath功能相同,
                //所以重复调用自身
                printFilePath(f);
            }
        }
    }
}
0

评论区