JavaEE:文件操作

news2024/12/21 17:38:58

文章目录

  • 文件操作和IO
    • 文件系统操作
      • File介绍
        • 属性
        • 构造方法
        • 方法
      • 代码演示
        • 前四个
        • list
        • mkdir
        • renameTo


文件操作和IO

文件系统操作

创建文件,删除文件,创建目录,重命名…
Java中有一个类,可以帮我们完成上述操作.
这个类叫做File类.

File介绍

属性

在这里插入图片描述
这个表格描述了文件路径的分隔符,由于这个分隔符在不同的系统上是不一样的.我们就可以通过上面的属性来做到平台无关化.

构造方法

在这里插入图片描述
在这些构造方法中,我们主要来谈第二个版本File(String pathname),使用String作为路径,我们可以往里面传入绝对路径,也可以传入相对路径.也可以指定一个不存在的路径.如果传入的是一个不存在的路径,那么后续对该路径执行的操作(如创建文件或目录)会创建一个新的文件或目录。

方法

下面列出了一系列关于File的操作.
在这里插入图片描述
在这里插入图片描述

  • getParent()可以返回File对象的父目录文件路径.
    在这里插入图片描述

  • getName()可以返回纯文件名称,也就是demo.txt

  • getPath()可以返回对象的文件路径.也就是C:\test\demo.txt

  • getAbsolutePath() 可以返回 File 对象的绝对路径

  • getCanonicalPath() 可以返回 File 对象的修饰过的绝对路径

  • exists()可以判断 File 对象描述的文件是否存在.

  • isDirectory() 判断 File 对象代表的文件是否是一个目录

  • isFile()判断 File 对象代表的文件是否是一个普通文件.

    需要注意的是,在计算机的视角下目录(文件夹)也是文件.

  • createNewFile()顾名思义,创建一个文件

  • delete()根据 File 对象,删除该文件,删除成功后返回true

  • deleteOnExit()这个删除比较特殊,它不是立即删除,而是等到程序执行结束,才删除.(稍后删除)

  • list()针对目录,返回File对象代表的目录下的所有文件名.

  • listFiles()针对目录,返回File对象代表的目录下的所有文件,以File对象表示.(相比于上一个,这个用的比较多)

  • mkdir()创建目录,只能创建一级目录.

  • mkdirs()可以递归的创建多级目录.

  • renameTo(File dest)重命名也可以视为我们平时的剪切、粘贴操作.

  • canRead()判断用户是否对文件有读权限

  • canWrite()判断用户是否对文件有写权限

代码演示

前四个
package javaEE.fileIO;

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

public class D {
    public static void main(String[] args) throws IOException {
        // 由于Windows默认使用反斜杠(\)来作为文件路径的分隔符
        // 一定要使用双反斜杠来表示 \\ 
        // 我们也可以使用/来作为文件路径的分隔符,Windows也支持.
        File file = new File("C:\\test\\demo.txt");
        System.out.println(file.getParent());// 打印File对象的父目录文件路径.
        System.out.println(file.getName());// 打印纯文件名称
        System.out.println(file.getPath());// 打印对象的文件路径
        System.out.println(file.getAbsolutePath());// 打印File对象的绝对路径
        // getCanonicalPath这个会抛出IOException异常
        System.out.println(file.getCanonicalPath());// 打印File对象的修饰过的绝对路径
    }
}

在这里插入图片描述
此时我们发现,后三个打印出来的路径一样.
这是咋回事呢?
这主要是因为我们针对File对象进行构造的时候,就是拿绝对路径进行构造的.
File file = new File("C:\\test\\demo.txt");
如果你是绝对路径构造的,那么getPath()得到的就是绝对路径,getAbsolutePath()得到的也是绝对路径,getCanonicalPath()得到的还是绝对路径.

我们把代码中的绝对路径改成相对路径,再次运行一下.

package javaEE.fileIO;

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

public class D {
    public static void main(String[] args) throws IOException {
        // 由于Windows默认使用反斜杠(\)来作为文件路径的分隔符
        // 一定要使用双反斜杠来表示 \\ . 我们也可以使用/来作为文件路径的分隔符,Windows也支持.
        File file = new File("./demo.txt");
        System.out.println(file.getParent());// 打印File对象的父目录文件路径.
        System.out.println(file.getName());// 打印纯文件名称
        System.out.println(file.getPath());// 打印对象的文件路径
        System.out.println(file.getAbsolutePath());// 打印File对象的绝对路径
        // getCanonicalPath这个会抛出IOException异常
        System.out.println(file.getCanonicalPath());// 打印File对象的修饰过的绝对路径
    }
}

在这里插入图片描述

我们都知道使用相对路径时,需要指定一个基准路径.那么以下代码的基准路径是谁呢?
java File file = new File("./demo.txt");
当我们通过IDEA运行程序时,基准路径就是idea打开的这个项目所在的路径.

把代码和运行结果放到一起对照一下,更容易看出区别.
在这里插入图片描述

关于IOException异常的触发情况:

  1. 硬盘空间不够
  2. 没有权限
list
package javaEE.fileIO;

import java.io.File;
import java.util.Arrays;

public class E {
    public static void main(String[] args) {
        File file = new File(".");
        // 打印当前目录下所包含的内容
        System.out.println(Arrays.toString(file.list()));
    }
}

当前目录
在这里插入图片描述

运行结果
在这里插入图片描述

直接使用list/listFiles只能看到当前目录中的内容.
如果想看到某个目录下,所有的目录和文件,就需要递归来完成.

package javaEE.fileIO;

import java.io.File;


public class F {
    public static void main(String[] args) {
        File file = new File(".");
        scan(file);
    }

    private static void scan(File currentDir) {
        // 判断当前文件是不是目录
        if(!currentDir.isDirectory()) {
            // 不是目录,直接返回
            return;
        }
        // 列出目录中包含的内容
        File[] files = currentDir.listFiles();
        // 判断目录是否为空
        if(files == null || files.length == 0) {
            // 为空,直接返回
            return;
        }
        // 打印当前文件路径
        System.out.println(currentDir.getAbsolutePath());
        // 遍历整个目录
        for (File file:files) {
            if(!file.isDirectory()) {
                // 不是目录,打印出绝对路径
                System.out.println(file.getAbsolutePath());
            } else {
                //是目录,继续递归
                scan(file);
            }
        }

    }
}

运行结果
在这里插入图片描述

mkdir
package javaEE.fileIO;

import java.io.File;

public class G {
    public static void main(String[] args) {
        File f = new File("./abc");
        boolean ok = f.mkdir();
        System.out.println(ok);
    }
}

在这里插入图片描述

renameTo

renameTo改名.

package javaEE.fileIO;

import java.io.File;

public class H {
    public static void main(String[] args) {
        File srcFile = new File("./abc");
        File destFile = new File("./abc1234");
        boolean ok = srcFile.renameTo(destFile);
        System.out.println(ok);
    }
}

可以看到abc成功改名了.
在这里插入图片描述
renameTo还可以用来移动文件,跟剪切的作用很像.

package javaEE.fileIO;

import java.io.File;

public class I {
    public static void main(String[] args) {
        // 将def这个文件从abc1234文件夹中,移动到当前文件夹中
        File srcFile = new File("./abc1234/def");
        File destFile = new File("./def");
        boolean ok = srcFile.renameTo(destFile);
        System.out.println(ok);
    }
}

移动文件,就是修改文件所在的路径,文件路径的修改,也可以视为是一种"重命名".

没有演示的方法都十分简单,这里就不再赘述了~

本文到这里就结束啦~

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

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

相关文章

【IIS实战】ERR_SSL_KEY_USAGE_INCOMPATIBLE

当我们第一次配置IIS服务器做测试环境网站时,如果没有插手做自签名证书,而是用IIS自带的自签名证书,那么现代浏览器访问HTTPS测试站点大概率会有下图所示的报错: (IE:我能打开( •̀ ω •́ )y&#xff0…

VuePress搭建个人博客(手动安装)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

ENSP配置云服务找不到以太网卡【已解决】

在搭建网络拓扑图的时候,想要连接云,发现没有以太网卡 环境:Windows10,ensp模拟器 以为一直是用轻薄本,上网都是连接wifi,所以没用上以太网卡。 一、在电脑环境上安装以太网卡 winR跳出运行口&#xff0c…

chapter13-常用类——(StringBuffer StringBuilder)—day15

475-StringBuffer结构剖析 476-StringBuffer转换 477-StringBuffer方法

2024.9.9

优化登录框: 当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录 当用户…

Java后台生成二维码

一、效果图 二、实现代码 1.添加依赖 <!-- zxing生成二维码 --> <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version> </dependency><dependency><grou…

【Dart 教程系列第 50 篇】在 Flutter 项目的国际化多语言中,如何根据翻译提供的多语言文档表格,快速生成不同语言的内容

这是【Dart 教程系列第 50 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 博文当前所用 Flutter SDK&#xff1a;3.22.1、Dart SDK&#xff1a;3.4.1 文章目录 一&#xff1a;问题描述二&#xff1a;解决方案三&#xff1a;完整代码 一&#xff1a;问题描述 在…

学会分析问题,画出分析图,解释问题过程,找出规律 ;整数数组分为左右2个部分,左边位奇数右边偶数

// 整数数组左边是奇数右边是偶数.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include<stdio.h> void swap(int& a,int& b) {int tempa;ab;btemp; } int main(int argc, char* argv[]) {int a[7]{1,2,3,4,5,…

使用jenkins 打包前端私服代码失败的问题

问题现象&#xff1a; jinekins 流水线在yarn 编译前端私服依赖包的时候&#xff0c;报错&#xff0c;提示 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 【emm。。。之前的构建都是好好的&#xff0c;也不知道前端大哥啥时候去封装的前端代码&am…

【每日刷题】Day115

【每日刷题】Day115 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 089. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 090. 打家劫舍 II - 力扣&…

阿里云服务器镜像,有大用处

大家好&#xff0c;我是小悟 有时候阿里云旧服务器快到期了&#xff0c;想把项目、数据、软件挪到新服务器上&#xff0c;如果全部重新搭建的话&#xff0c;那无疑是耗时又费力。有了镜像迁移&#xff0c;就方便了许多。 新旧服务器的类型要一致&#xff0c;比如都是ECS服务器…

Matlab程序练习

Part1 1.求 [100,999] 之间能被 21整除的数的个数。 程序&#xff1a; 主文件&#xff1a;main.m clear; start_num 100; end_num 999; div_num 21; res div(start_num,end_num,div_num); fprintf("[%d,%d]之间能被%d整除的数的个数为%d个\n",start_num,end_…

使用Azure+C#+visual studio开发图像目标检测系统

在这篇文章里面&#xff0c;我们讲解使用AzureC#visual studio在Azure上做图像的目标检测系统。 笔者是头一次接触C#。之前以Python Java和Scala为主。感觉C#.Net是一种挺好用的开发系统。C#和Java非常像。会一个学另一个很快。 首先&#xff0c;目标检测是个什么东西&#x…

vulhub spring 远程命令执行漏洞(CVE-2022-22963)

1.执行以下命令启动靶场环境并在浏览器访问 cd spring/CVE-2022-22963docker-compose up -ddocker ps 2.反弹shell 构造payload 3.页面刷新抓包&#xff0c;修改内容 POST /functionRouter HTTP/1.1 Host: 172.16.1.89:8080 Accept-Encoding: gzip, deflate Accept: */* Acc…

任务栏颜色怎么改?快速实现Windows系统任务栏透明,全面指南和操作实践!

任务栏是电脑操作系统的重要组成部分&#xff0c;电脑会自动为任务栏选择颜色&#xff0c;一般分为浅色&#xff08;白色&#xff09;、深色&#xff08;黑色&#xff09;。如果想要设置成自己喜欢的颜色&#xff0c;也是可以更改的&#xff0c;那么任务栏颜色怎么改呢&#xf…

实时图像处理的加速器:《基于FPGA的数字图像处理原理及应用》(可下载)

图像处理技术已成为我们生活中不可或缺的一部分。从智能手机的摄像头到卫星图像分析&#xff0c;从医疗影像到安全监控&#xff0c;图像处理技术的应用无处不在。随着技术的进步&#xff0c;我们对图像处理的速度和质量要求也越来越高。在这一背景下&#xff0c;现场可编程门阵…

CDGA|大模型数据治理的案例与实践深入剖析

随着人工智能技术的飞速发展&#xff0c;大模型在数据治理领域的应用日益广泛&#xff0c;为企业带来了前所未有的机遇与挑战。本文将通过几个具体案例&#xff0c;深入剖析大模型在数据治理中的实践应用&#xff0c;探讨其带来的变革与影响。 大模型在数据治理中的核心优势 大…

大腾智能出席龙华云创中心启动与鸿蒙园揭牌仪式

在数字化转型的浪潮中&#xff0c;深圳市龙华区再次引领行业创新&#xff0c;携手华为云成功举办“龙华工业软件云工程应用创新中心启动仪式暨鸿蒙产业园揭牌仪式”&#xff0c;本次盛会已于8月26日圆满落幕。活动现场&#xff0c;来自全国各地的行业精英、企业领袖及专家学者汇…

资料分析(2)

C B 增长量不变就是1002020 上面是利滚利:按照20%当利息 本题:涨跌幅度的意思就是增长率&#xff0c;本题是按照增长率不变的情况下进行计算D B 7551400X>1.2*100000 B B B 总体增量部分增量之和 先进行计算固定通信业务收入的增长量移动通信业务实现收入的增长量 增长量现期…

11大排序的原理讲解和Python源码剖析

排序算法 【谁教你这么剪的 | 11大排序的原理讲解和Python源码剖析】 https://www.bilibili.com/video/BV1Zs4y1X7mN/?share_sourcecopy_web&vd_sourceed4a51d52f6e5c9a2cb7def6fa64ad6a 稳定&#xff1a;如果a原本在b前面&#xff0c;而ab&#xff0c;排序之后a仍然在b…