Java File类的使用(详解)

一、概述

        java.io.File类是文件和目录路径名称的抽象表示,主要用于文件和目录的创建、查找和删除等操作

二、File类的构造方法

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

        - public File(String parent,String child):从父路径字符串 和 子路径字符串创建新的File实例

        - public File(File parent,String child):从父抽象路径名 和 子路径名字符串创建新的File实例

        注意事项:

                1.一个FIle代表的是硬盘中的一个路径或者一个文件

                2.无论该路径下是否存在文件或目录,都不影响File对象的创建

        File file1 = new File("D:\\aaa\\a.txt");
        File file2 = new File("D:\\aaa","a.txt");
        File file3 = new File("a.txt");
        System.out.println(file1);
        System.out.println(file2);
        System.out.println(file3);

        System.out.println("=================================");
        // 关键File类对象表示"D:\aaa\bbb"文件夹路径
        File file4 = new File("D:\\aaa\\bbb");
        File file5 = new File("D:\\aaa","bbb");
        File file6 = new File("bb");
        System.out.println(file4);
        System.out.println(file5);
        System.out.println(file6);

        System.out.println("=================================");
        File file7 = new File("D:\\aaa\\abcdefg");
        System.out.println(file7);

        输出结果:
            D:\aaa\a.txt
            D:\aaa\a.txt
            a.txt
            =================================
            D:\aaa\bbb
            D:\aaa\bbb
            bb
            =================================
            D:\aaa\abcdefg

三、绝对路径 和 相对路径

        1.绝对路径

                从盘符开始的路径,这是一个完成的路径

        2.相对路径

                相对于项目目录的路径,这是一个边界的路径,开发中最常用的【掌握】

         举个例子:

                生活中:

                        生活中:你和女朋友在 XXX公司 上班

                           你告诉你女朋友你在哪里:

                                -绝对路径:X市X区X路XXX公司 X栋301

                                -相对路径:                                 X栋301

                程序中:

                        -绝对路径:D:\\myprojects\\javase0806\\MyTest\\src\\cn\\dkt\\utils
                        -相对路径:MyTest\\src\\cn\\dkt\\utils

        File file1 = new File("D:\\myprojects\\javase0806\\MyTest\\src\\cn\\dkt\\utils");
        // 相对路径
        File file2 = new File("MyTest\\src\\cn\\dkt\\utils");
        System.out.println(file1);
        System.out.println(file2);

        

四、获取功能的方法

        - public String getAbsolutePath():返回File的绝对路径名 字符串
        - public String getPath():将此File转换为路径名 字符串,获取构造路径(就是获取你构造方法时候放入的路径)
        - public String getName():返回此File表示的文件或目录的名称
        - public long length():返回此File表示的文件的字节大小,不能获取目录的字节大小

        方法演示:

                (这里只是作为一个示范,请忽略我的项目路径😂,这项目纯属个人学习方便)

        // 创建一个File对象,表示day12项目里的 resources\images\a.jpg
        File file1 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a.jpg");
        System.out.println("file1的绝对路径:" + file1.getAbsolutePath());
        System.out.println("获取file1的构造路径:" + file1.getParent());
        System.out.println("获取file1的文件名称:" + file1.getName());

        输出结果:
            file1的绝对路径:D:\myprojects\javase0806\day12_File类与递归&IO流&字符流&字节流\resouress\a.jpg
            获取file1的构造路径:day12_File类与递归&IO流&字符流&字节流\resouress
            获取file1的文件名称:a.jpg

五、判断功能的方法

        - public boolean exists(): 此File标识的文件或目录是否实际存在
        - public boolean isDirectory():此File标识的是否为文件夹
        - public boolean isFile():此file表示的是否为文件

        代码演示:

                        (大家进行练习的时候,尽量用一个自己真是存在的路径,演示效果会更佳)

        // 创建一个真是的文件路径
        File file1 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a.jpg");
        System.out.println("file1表示的文件是否真实存在:" + file1.exists());
        System.out.println("file1表示的文件是否是文件夹" + file1.isDirectory());
        System.out.println("file1表示的文件是否是文件" + file1.isFile());

        // 创建一个真实的文件夹路径
        File file2 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress");
        System.out.println("file1表示的文件夹是否真实存在:" + file2.exists());
        System.out.println("file1表示的文件夹是否是文件夹" + file2.isDirectory());
        System.out.println("file1表示的文件夹是否是文件" + file2.isFile());

        // 创建一个不真实的文件路径
        File file3 = new File("day12_File类与递归&IO流&字符流&字节流\\resoures\\a.jpg");
        System.out.println("file1表示的文件是否真实存在:" + file3.exists());
        System.out.println("file1表示的文件是否是文件夹" + file3.isDirectory());
        System.out.println("file1表示的文件是否是文件" + file3.isFile());

        // 创建一个不真实的文件夹子路径
        File file4 = new File("day12_File类与递归&IO流&字符流&字节流\\resoures\\a.jpg");
        System.out.println("file1表示的文件夹是否真实存在:" + file4.exists());
        System.out.println("file1表示的文件夹是否是文件夹" + file4.isDirectory());
        System.out.println("file1表示的文件夹是否是文件" + file4.isFile());

        输出结果:
            file1表示的文件是否真实存在:true
            file1表示的文件是否是文件夹false
            file1表示的文件是否是文件true
            file1表示的文件是否真实存在:true
            file1表示的文件是否是文件夹true
            file1表示的文件是否是文件false
            file1表示的文件是否真实存在:false
            file1表示的文件是否是文件夹false
            file1表示的文件是否是文件false
            file1表示的文件是否真实存在:false
            file1表示的文件是否是文件夹false
            file1表示的文件是否是文件false

六、创建和删除的方法     

        - public boolean creatNewFile():当 且仅当不存在该名称的文件时,创建一个新的空文件
        - public boolean mkdir():创建由File表示的目录
        - public boolean mkdirs():创建由File表示的目录,包括任何必须但不存在的父目录
        - public boolean delete():删除由此File表示的文件或目录,只能删除文件或者空文件夹,不能删除非空文件夹

        代码演示:

                        (在使用删除文件夹功能时,文件夹要为空)

        // 创建文件
        File file1 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a.txt");
        System.out.println("是否创建成功:" + file1.createNewFile());

        File file2 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\aaa");
        System.out.println("是否创建成功:" + file2.createNewFile()); // 创建了一个无法标识的文件

        // 创建文件夹
        File file3 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\b");
        System.out.println("使用mkdir创建文件夹:" + file3.mkdir());

        // 创建多级目录
        File file5 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a\\b\\c");
        System.out.println("使用mkdires创建多级目录:" + file5.mkdirs());

        // 删除一个文件
        File file6 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a.txt");
        System.out.println("文件是否删除成功:" + file6.createNewFile());

        // 删除空文件夹
        File file7 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\b");
        System.out.println("空文件夹是否删除成功:" + file7.delete());

        // 删除非空文件夹
        File file8 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress\\a");
        System.out.println("非空文件夹是否删除成功:" + file8.delete());

        输出结果:
            是否创建成功:false
            是否创建成功:false
            使用mkdir创建文件夹:true
            使用mkdires创建多级目录:false
            文件是否删除成功:false
            空文件夹是否删除成功:true
            非空文件夹是否删除成功:false

        

七、遍历目录的方法

        - public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录的名称
        - public File[] listFiles():返回一个File数组,表示File目录中的所有子文件或目录的路径

        代码演示:

         (调用listFiles ()方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历)

        (这里的代码也仅仅时演示以下,毕竟每个人的文件路径都不一样,自己练习的时候,以自己的路径为准)

        (😂忽略这个不正规的起名方式,我这是为了方便自己学习记笔记,平时写项目不会这样)

        // 创建File对象,表示文件夹路径
        File file1 = new File("day12_File类与递归&IO流&字符流&字节流\\resouress");
        // 获取file1路径下的所有子文件和子文件夹的名称
        String[] list1 = file1.list();
        for (String s : list1) {
            System.out.println(s);
        }

        // 获取file1路径下的所有子文件和子文件夹的路径
        File[] list2 = file1.listFiles();
        for (File file : list2) {
            System.out.println(file);
        }

        // 访问缓存文件夹,或者如果该文件限制了访问权限
        File file3 = new File("d:\\System Volume Information");
        String[] list3 = file3.list();
        File[] files = file3.listFiles();
        System.out.println(list3+","+files);
        if(list3 != null){
            for (String s : list3) {
                System.out.println(s);  // 直接对没有访问权限的文件夹遍历的话会 NullPointerException异常
            }
        }

        // 同理,如果文件夹路径不存在,返回值也是null,但是遍历同样会报错:空指针异常
        File file4 = new File("d:\\aaabbb");
        String[] list4 = file4.list();
        File[] files4 = file4.listFiles();
        System.out.println(list4 + "," + files4); // null, null

        输出结果:
            a
            a.jpg
            a.txt
            aaa
            day12_File类与递归&IO流&字符流&字节流\resouress\a
            day12_File类与递归&IO流&字符流&字节流\resouress\a.jpg
            day12_File类与递归&IO流&字符流&字节流\resouress\a.txt
            day12_File类与递归&IO流&字符流&字节流\resouress\aaa
            null,null
            null,null

Java可以通过FTP工具来操作FTP,以下是一个示例: ``` import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; public class FTPUtil { private static final String FTP_ADDRESS = "ftp服务器地址"; private static final int FTP_PORT = 21; private static final String FTP_USERNAME = "ftp用户名"; private static final String FTP_PASSWORD = "ftp密码"; // 连接到FTP服务器 public static FTPClient connectFTP() throws SocketException, IOException { FTPClient ftpClient = new FTPClient(); ftpClient.connect(FTP_ADDRESS, FTP_PORT); ftpClient.login(FTP_USERNAME, FTP_PASSWORD); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { ftpClient.disconnect(); throw new IOException("连接FTP服务器失败"); } return ftpClient; } // 上传文件到FTP服务器 public static void uploadFile(String remotePath, String fileName, InputStream input) throws IOException { FTPClient ftpClient = null; try { ftpClient = connectFTP(); ftpClient.changeWorkingDirectory(remotePath); // 切换到上传目录 ftpClient.storeFile(fileName, input); } finally { if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } } } // 从FTP服务器下载文件 public static void downloadFile(String remotePath, String fileName, OutputStream output) throws IOException { FTPClient ftpClient = null; try { ftpClient = connectFTP(); ftpClient.changeWorkingDirectory(remotePath); // 切换到下载目录 ftpClient.retrieveFile(fileName, output); } finally { if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } } } // 删除FTP服务器上的文件 public static boolean deleteFile(String remotePath, String fileName) throws IOException { FTPClient ftpClient = null; try { ftpClient = connectFTP(); ftpClient.changeWorkingDirectory(remotePath); // 切换到删除目录 return ftpClient.deleteFile(fileName); } finally { if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } } } } ``` 使用方式: 上传文件: ``` File file = new File("本地文件路径"); InputStream input = new FileInputStream(file); FTPUtil.uploadFile("上传目录", "上传的文件名", input); ``` 下载文件: ``` OutputStream output = new FileOutputStream(new File("本地文件路径")); FTPUtil.downloadFile("下载目录", "下载的文件名", output); ``` 删除文件: ``` FTPUtil.deleteFile("删除目录", "删除的文件名"); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值