文件及Java中File类详解

news2025/1/18 8:50:50

目录

一, 文件

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();
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊每日站会

这是鼎叔的第七十四篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本专栏和微信公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。 每日站会是一线敏捷团队自己的会议,快速同步成员为达成迭代目标所…

对象模型和this指针(个人学习笔记黑马学习)

1、成员变量和成员函数 #include <iostream> using namespace std; #include <string>//成员变量和成员函数分开存储class Person {int m_A;//非静态成员变量 属于类的对象上的static int m_B;//静态成员变量 不属于类的对象上void func() {} //非静态成员函数 不…

必读干货!独立站新手卖家常见十大问题解答

新手卖家入局跨境电商独立站&#xff0c;会考虑到很多问题&#xff0c;从网站到产品再到售卖最终的发货。而且卖家普遍对独立站存在认知不全的问题&#xff0c;门槛高、推广难、转化难是最初印象。 那独立站该怎么开始&#xff0c;如何下手&#xff1f;今天整理并解答独立站新…

【大模型AIGC系列课程 3-3】低成本的领域私域大模型训练方法

重磅推荐专栏: 《大模型AIGC》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经验分享,旨在帮助读者更好地…

读余华小说《兄弟》

上部读完的一些笔记和思考&#xff0c;下部 TODO 时间&#xff1a;上世纪6、70年代 地点&#xff1a;刘镇 人物&#xff1a;故事中的兄弟指的是&#xff1a;宋钢(兄)&#xff0c;李光头&#xff08;弟&#xff09;&#xff0c;如下为简单的人物和命运图 一些故事&#xff1a;…

【Golang】函数篇

1、golang函数基本定义与使用 func 函数名 (形参列表) (返回值类型列表) {函数体return 返回值列表 }其中func用于表明这是一个函数&#xff0c;剩下的东西与其他语言的函数基本一致&#xff0c;在定义与使用的时候注意函数名、参数、返回值书写的位置即可。下面使用一个例子…

linux 下安装配置nexus

一、安装包获取方式 方式一 1、直接把下载好的安装包上传到服务器中 方式二 2、通过wget安装Nexus压缩包 ①、可以使用以下命令进行安装Nexus的最新版本 wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz②、也可以点击官网复制想要下载的Nexus压缩包进行安装…

腾讯云免费SSL证书申请流程_2023更新教程

2023腾讯云免费SSL证书申请流程&#xff0c;一个腾讯云账号可以申请50张免费SSL证书&#xff0c;免费SSL证书为DV证书&#xff0c;仅支持单一域名&#xff0c;申请腾讯云免费SSL证书3分钟即可申请成功&#xff0c;免费SSL证书品牌为TrustAsia亚洲诚信&#xff0c;腾讯云百科分享…

jupyter notebook 魔术命令介绍和简单使用

在Jupyter notebook中&#xff0c;“魔法命令”是特殊的命令&#xff0c;不是Python语言的一部分&#xff0c;但可以使您的生活更轻松。这些命令前面有%符号。 魔法命令很有用&#xff0c;可以直接嵌入到python代码中&#xff0c;并解决常见问题&#xff0c;例如列出当前目录中…

分布式session的4种解决方案

分布式session的4种解决方案 1、cookie和session cookie和session都是用来跟踪用户身份信息的会话方式。 cookie存储的数据保存在本地客户端&#xff0c;用户获取容易&#xff0c;但安全性不高&#xff0c;存储数据小。 session存储的数据保存在服务器&#xff0c;用户不易获取…

Ubuntu中安装clion并把clion添加到桌面快捷方式

Clion的安装&#xff1a; CLion是由大名鼎鼎的JetBrains公司出品的一款面向C和C的集成开发工具。下载地址。 下载后解压出来&#xff0c;然后进入到解压后的文件夹里面&#xff0c;执行 ./clion.sh 便可以运行软件&#xff1a; cd bin/ ./clion.sh 激活使用的话&…

亚马逊庭院类目或迎来显著增长;倩碧使用TikTok全新搜索广告功能

夏季即将结束&#xff0c;但Jungle Scout Cobalt数据显示&#xff0c;亚马逊的Patio, Lawn & Garden类目仍将迎来显著的季节性增木 除了夏季销售的飙升&#xff0c;Generators & Portable Power发电机和便携式电源子类别的销售一般会在初秋和假日季节会迎来大幅增长&a…

820. 单词的压缩编码

820. 单词的压缩编码 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;__820单词的压缩编码__存储后缀__820单词的压缩编码__字典前缀树 原题链接&#xff1a; 820. 单词的压缩编码 https://leetcode.cn/problems/short-encoding-of-word…

从Matrix-ResourceCanary看内存快照生成-ForkAnalyseProcessor(2)

不同于LeakCanary,在Matrix中,主要是通过Resource Canary来监控内存泄漏问题的,且监听的泄漏对象只支持Activity,官方说明如下: 结合分析LeakCanary的经验可知,要实现Activity内存泄漏监听,总体上应该要实现两大功能: Activity生命周期监控查找泄漏对象并得到GC Root P…

2023-9-3 分解质因数

题目链接&#xff1a;分解质因数 #include <iostream>using namespace std;void divide(int n) {for(int i 2; i < n / i; i ){if(n % i 0){int res 0;while(n % i 0){n / i;res ;}cout << i << << res << endl;}}if(n > 1) cout &l…

ZDH-权限模块

本次介绍基于ZDH v5.1.2版本 目录 项目源码 预览地址 安装包下载地址 ZDH权限模块 ZDH权限模块-重要名词划分 ZDH权限模块-菜单管理 ZDH权限模块-角色管理 ZDH权限模块-用户配置 ZDH权限模块-权限申请 项目源码 zdh_web: GitHub - zhaoyachao/zdh_web: 大数据采集,抽…

SWAT-MODFLOW地表水与地下水耦合

耦合模型被应用到很多科学和工程领域来改善模型的性能、效率和结果&#xff0c;SWAT作为一个地表水模型可以较好的模拟主要的水文过程&#xff0c;包括地表径流、降水、蒸发、风速、温度、渗流、侧向径流等&#xff0c;但是对于地下水部分的模拟相对粗糙&#xff0c;考虑到SWAT…

Java:Springboot和React中枚举值(数据字典)的使用

目录 1、开发中的需求2、实现效果3、后端代码4、前端代码5、接口数据6、完整代码7、参考文章 1、开发中的需求 开发和使用过程中&#xff0c;通常会涉及四个角色&#xff1a;数据库管理员、后端开发人员、前端开发人员、浏览者 数据库使用int类型的数值进行存储&#xff08;e…

PMD代码检查:属性应该在类的最顶部声明(FieldDeclarationsShouldBeAtStartOfClass)

https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_rules_java_codestyle.html#fielddeclarationsshouldbeatstartofclass 属性的声明应该在类的最顶部&#xff0c;即在方法声明、构造器、初始化、内部类的前面。默认允许枚举声明、匿名类的声明放在属性的前面。 将下面语句放在…

Linux服务——nginx重写功能与反向代理

目录 一、nginx重写功能 if指令 return指令 set指令 break指令 rewrite指令 防盗链 二、反向代理 反向代理参数 反向代理——缓存功能 反向代理——ip穿透 反向代理——动静分离 反向代理——负载均衡 一、nginx重写功能 Nginx服务器利用 ngx_http_rewrite_module…