文件及Java中File类详解

目录

一, 文件

1,什么是文件

2,路径

二, File类

1,File类的构造方法

      签名

说明

2,File类的方法

修饰符及返回值类型

方法签名

说明

2.1,get方法的使用

2.2,普通文件的创建以及删除

2.3,普通目录文件的创建以及删除

3,代码示例

示例1

示例2


一, 文件

1,什么是文件

文件一般分为两类:狭义上的文件和广义上的文件;狭义上的文件一般是针对硬盘上持久化存储的数据(比如硬盘上的文件和目录),而广义上的文件泛指计算机中的很多软硬件资源,操作系统中,把很多的硬件设备和软件资源抽象成了文件;本篇博客主要讨论的是狭义上的文件.

2,路径

我们在写Java程序代码时,存储数据主要是靠变量,每定义一个变量都是存储在内存上的,而这里说的文件则是存储在硬盘上的,每个文件在硬盘上都有一个具体的存储位置,称为"路径";路径又分为绝对路径和相对路径.

绝对路径:以盘符开头的路径

此时 tmp 的目录的绝对路径就是 d:/tmp

相对路径:以当前目录(也叫做工作目录:每个程序运行时都有一个工作目录)为基准,以 . 或者 .. 开头( . 有时候可以省略),找到指定的路径

此时所在的当前目录是 d:/tmp/aaa 如果以当前目录为工作目录表示 tmp 目录的话就可以表示为 ../

注意:

  • 目录与目录之间的分隔符既可以用 / 也可以用 / 表示,但是大部分情况下推荐使用 / ,因为使用 \ 时容易出现转义字符的问题
  • 使用相对路径表示路径时,当前目录可以表示为 ./  上级目录可以表示为 ../

二, File类

  1. 在Java中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述,注意,有File对象并不代表真实存在的文件,但是可以对该file对象进行一些属性获取的操作;
  2. java中对于文件的操作可以分为针对文件系统的操作(文件的创建,删除和重命名)和针对文件内容的操作(文件的读和写).

1,File类的构造方法

      签名
说明
File(File parent, String
child)
根据父目录 + 孩子文件路径,创建一个新的 File 实例
File(String pathname)
根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者
相对路径
File(String parent, String
child)
根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用
路径表示

其中第二种最为方便也是最常用的一种构造方法

2,File类的方法

修饰符及返回值类型
方法签名
说明
String
getParent()
返回 File 对象的父目录文件路径
String
getName()
返回 FIle 对象的纯文件名称
String
getPath()
返回 File 对象的文件路径
String
getAbsolutePath()
返回 File 对象的绝对路径
String
getCanonicalPath()
返回 File 对象的修饰过的绝对路径
boolean
exists()
判断 File 对象描述的文件是否真实存在
boolean
isDirectory()
判断 File 对象代表的文件是否是一个目录
boolean
isFile()
判断 File 对象代表的文件是否是一个普通文件
boolean
createNewFile()
根据 File 对象,自动创建一个空文件。成功创建后返
true
boolean
delete()
根据 File 对象,删除该文件。成功删除后返回 true
void
deleteOnExit()
根据 File 对象,标注文件将被删除,删除动作会到
JVM 运行结束时才会进行
String[]
list()
返回 File 对象代表的目录下的所有文件名
File[]
listFiles()
返回 File 对象代表的目录下的所有文件,以 File 对象表示
boolean
mkdir()
创建 File 对象代表的目录
boolean
mkdirs()
创建 File 对象代表的目录,如果必要,会创建中间目录
boolean
renameTo(File
dest)
进行文件改名,也可以视为我们平时的剪切、粘贴操作
boolean
canRead()
判断用户是否对文件有可读权限
boolean
canWrite()
判断用户是否对文件有可写权限

2.1,get方法的使用

    public static void main3(String[] args) throws IOException {
        File file = new File("D:/xmy.txt");//并非真实存在这个文件
        System.out.println(file.getName());
        System.out.println(file.getParent());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }

windows上盘符大小写都可以,其中创建的file对象并非真实存在,但是依然获取相关属性

2.2,普通文件的创建以及删除

    public static void main(String[] args) throws IOException {
        File file = new File("D:/xmy.txt");
        System.out.println(file.exists());
        file.createNewFile();
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
        file.delete();
        System.out.println(file.exists());
    }

2.3,普通目录文件的创建以及删除

    public static void main7(String[] args) {
        //对于目录进行删除的时候只能删除空目录或者单个文件
        File file = new File("D:/aaaaa");
        System.out.println(file.exists());
        file.mkdir();
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
        file.delete();
        System.out.println(file.exists());
    }

  • 目录创建时,如果是单级目录的话可以使用mkdir,如果是多级目录的话则必须使用mkdirs方法
  • 删除目录的话不可以连续删除多级目录,只能删除空目录或者单个文件

3,代码示例

示例1

扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件

mport java.io.File;
import java.util.Scanner;

public class Demo3 {
    /**
     * 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件
     *
     * @param args
     */
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {

        System.out.println("请输入你要扫描的根目录: ");
        String rootPath = scanner.next();
        File root = new File(rootPath);

        //如果被扫描的根目录是一个文件的话则无法进行搜索
        if (!root.isDirectory()) {
            System.out.println("输入的根目录有误!");
            return;
        }

        System.out.println("请输入你要删除的文件名: ");
        String nameToDelete = scanner.next();

        //针对路径进行递归扫描
        scanDir(root, nameToDelete);
    }

    private static void scanDir(File root, String nameToDelete) {
        System.out.println("[scanDir]: " + root.getAbsolutePath());//查看一下递归的过程 将每一次的路径打印出来

        //1.将该根目录下的所有目录和文件转换成一个文件数组
        File[] files = root.listFiles();
        if (files == null || files.length == 0) {
            //当root目录下没有任何东西 目录为空 此时结束递归
            return;
        }

        //2.对文件数组进行遍历
        for (File f : files) {
            //判断该文件是普通文件还是目录
            if (f.isDirectory()) {
                //文件是目录的话继续进行递归扫描
                scanDir(f, nameToDelete);
            } else {
                //文件是文件的话判断是否是要删除的文件
                if (f.getName().contains(nameToDelete)) {
                    //是需要删除的文件时循环用户是否进行删除
                    System.out.println("是否要删除 " + f.getAbsolutePath() + " 路径下的 " + f.getName() + " 文件?");
                    String choice = scanner.next();
                    if (choice.equals("y") || choice.equals("Y")) {
                        f.delete();
                        System.out.println("删除成功!");
                    } else {
                        System.out.println("取消删除!");
                    }
                }
            }
        }
    }
}

示例2

使用流对象对文件进行拷贝,这里涉及到了流对象,但是主要也是对于文件的相关操作,流对象的博客详解可以参考:文件操作中的IO流——字节流与字符流_蜡笔小心眼子!的博客-CSDN博客

import java.io.*;
import java.util.Scanner;

/**
 * 使用流对象对文件进行拷贝
 */

public class Demo4 {
    public static void main(String[] args) {
        //输入两个路径 分别表示源路径和目标路径
        //对于源路径需要判断是否存在
        //对于目标路径需要判断是否已经存在
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入需要拷贝的路径: ");
        String srcPath = scanner.next();
        System.out.println("请输入需要被拷贝到的目标路径: ");
        String destPath = scanner.next();

        File srcFile = new File(srcPath);
        if(!srcFile.isFile()) {
            //如果源文件不是一个文件(是个目录或者不存在) 此时就不进行拷贝
            System.out.println("您当前输入的原路径有误!");
            return;
        }

        File destFile = new File(destPath);
        if(destFile.isFile()) {
            //如果已经存在 此时也不能进行拷贝
            System.out.println("您输入的目标路径有误!");
            return;
        }

        //进行拷贝操作
        try(InputStream inputStream = new FileInputStream(srcFile);
            OutputStream outputStream = new FileOutputStream(destFile)) {

            //进行读写文件操作
            while (true) {
                int b = inputStream.read();
                if(b == -1) {
                    break;
                }
                outputStream.write(b);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/101690.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详细教程:Stegsolve的下载,jdk的下载、安装以及环境的配置

最近在学习隐写术,下载stegsolve 以及使用stegsolve倒腾了很久,避免朋友们和我一样倒腾了很久,希望此文可以帮到刚在学习隐写的朋友们(win7下使用stegsolve) 文章目录 一、下载stegsolve链接二、jdk的下载三、jdk的安装四、配置环境变量五、检…

更改SVG矢量图片的颜色

问题:我从网上找的svg图片,颜色一直是黑色的,和下边的用户管理模块、卷题管理等模块的图标对不起来,看起来很怪。 办法: 1.直接在你的编程软件中 ctrl + alt +F,全局搜索“组织管理” 找到组织管理对应的文件,然后双击点进去 2.找到icon 这里对应的icon的属性值就是矢…

响应式图片与 CSS image-set

响应式图片 前置知识 art direction problem光栅图像与矢量图像 raster image and vector images img 能否担此重任 sizessrcset实际看一看 picture: img 的好姐妹 source实际看一看 CSS image-set 语法兼容性 其他注意事项 响应式图片 图片在网页中占据了 超过 60% 的浏览带…

WordPress(5)在主题中添加文章字数和预计阅读时间

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 样式图一、添加位置二、找到主题文件样式图 提示:以下是本篇文章正文内容,下面案例可供参考 一、添加位置 二、找到主题文件 在主题目录下functions.php文件把下面的代码添加进去: // 文章字数…

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书江西师范大学图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书江西师范大学图书馆

2021年12月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:电话号码 给你一些电话号码,请判断它们是否是一致的,即是否有某个电话是另一个电话的前缀。比如: Emergency 911 Alice 97 625 999 Bob 91 12 54 26 在这个例子中,我们不可能拨通Bob的电话,因为Emergency的电话是它的前缀,当拨…

基于BES2300YP 蓝牙耳机在线EQ调整功能设计

+他V hezkz17进数字音频系统研究开发交流答疑群(课题组) 1 BES SDK支持EQ 在运行中修改 </

vue h5项目 打包加载优化

打包美化: 1&#xff09;npx browserslistlatest --update-db 更新去除警告 2&#xff09;打包进度条 npm add progress-bar-webpack-plugin -D npm add webpackbar -D npm install --save-dev webpack-bundle-analyzer 优化&#xff1a; 1.各个插件和loader所花费的时间 …

Ubuntu22.04安装Mongodb7.0

Ubuntu安装Mongodb 1.平台支持2.安装MongoDB社区版2.1导入包管理系统使用的公钥2.2为MongoDB创建列表文件2.3重新加载本地包数据库2.4安装MongoDB包1.安装最新版MongoDB2.安装指定版MongoDB 3.运行MongoDB社区版1.目录2.配置文件3.初始化系统4.启动MongoDB5.验证MongoDB是否成功…

基于Open3D的点云处理16-特征点匹配

点云配准 将点云数据统一到一个世界坐标系的过程称之为点云配准或者点云拼接。&#xff08;registration/align&#xff09; 点云配准的过程其实就是找到同名点对&#xff1b;即找到在点云中处在真实世界同一位置的点。 常见的点云配准算法: ICP、Color ICP、Trimed-ICP 算法…

【项目】Reactor模式的服务器

目录 Reactor完整代码连接 前置知识&#xff1a; 1.普通的epoll读写有什么问题&#xff1f; 2.Connection内的回调函数是什么 3.服务器的初始化&#xff08;Connection只是使用的一个结构体&#xff09; 4.等待就绪事件&#xff1a;有事件就绪&#xff0c;对使用Connectio…

“宽带中国”城市试点与专利匹配数据,做一个多期DID(2010-2021)

数据简介&#xff1a;人类正在经历以互联网为基础的第三次技术革命&#xff0c;作为以“互联网”为底层基础的数字经济&#xff0c;以5G、人工智能和大数据中心为代表的数字基础设施建设和普惠宽带网络基础设施建设成为数字经济可持续发展的动力。工业和信息化部、国家发展和改…

stable diffusion实践操作-批次出图

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、批次出图介绍1.1 webUI设置1.2 参数介绍 二、批次出图使用2.1 如何设置2.1 效果展示 总结 前言 本章主要介绍SD批次出图。 想要一次产生多张图片的时候使用。 一、批次出图介绍 1.1 webUI设置 1.2 参数…

【Mysql系列】(一)MySQL语句执行流程

首发博客地址 首发博客地址 系列文章地址 参考文章 MySQL 逻辑架构 连接器 连接命令一般是这么写的 mysql -h$ip -P$port -u$user -p 那么 什么是连接器&#xff1f; MySQL 连接器&#xff08;MySQL Connector&#xff09;是用于连接和与 MySQL 数据库进行交互的驱动程序。它提…

机器学习——决策树与随机森林

机器学习——决策树与随机森林 文章目录 前言一、决策树1.1. 原理1.2. 代码实现1.3. 网格搜索1.4. 可视化决策树 二、随机森林算法2.1. 原理2.2. 代码实现 三、补充&#xff08;过拟合与欠拟合&#xff09;总结 前言 决策树和随机森林都是常见的机器学习算法&#xff0c;用于分…

Linux字符设备中的两个重要结构体(file、inode)

https://www.cnblogs.com/chen-farsight/p/6177870.html

day-05 TCP半关闭 ----- DNS ----- 套接字的选项

一、优雅的断开套接字连接 之前套接字的断开都是单方面的。 &#xff08;一&#xff09;基于TCP的半关闭 Linux的close函数和windows的closesocket函数意味着完全断开连接。完全断开不仅不能发送数据&#xff0c;从而也不能接收数据。在某些情况下&#xff0c;通信双方的某一方…

qt相关的demo集合

自己写过的qt/c相关程序的demo集合 &#xff08;许多学习自网络中&#xff0c;很感谢大家的分享&#xff09; 源码地址&#xff1a;Qt与学习通页面: 记录与Qt相关的代码 - Gitee.com 源码目录: echart简单应用 opencv图像处理 QSetting简单使用 QtAv播放视频 ui页面 表情 超星…

构建现代应用:Java中的热门架构概览

文章目录 1. 三层架构2. Spring框架3. 微服务架构4. Java EE&#xff08;Enterprise Edition&#xff09;5. 响应式架构6. 大数据架构7. 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;8. 安卓开发架构结论 &#x1f389;欢迎来到Java学习路线专栏~…

SAP_ABAP_OLE_EXCEL批导案例

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型https://blog.csdn.net/java_zhong1990/article/details/132469977 一、OLE_EXCEL批导 1.1 下载按钮 1.2 选择EXCEL上传&#xff0c;解析EXCLE数据&#xff0c; Call屏幕。 1.3 实现效果 1.4…