当前位置: 首页 > news >正文

23Java基础之File

File与IO的简介

有些数据想长久保存起来,该怎么办?
image

  • 文件是非常重要的存储方式,在计算机硬盘中。
  • 即便断电,或者程序终止了,存储在硬盘文件中的数据也不会丢失。

1.File

  • File是java.io包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件,或文件夹)。
    image
    注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。

2.IO流

  • 用于读写数据的(可以读写文件,或网络中的数据...)

File:代表文本
IO流:读写数据

File

  • 创建File类的对象
    image
    注意:
  • File对象既可以代表文件、也可以代表文件夹。
  • File封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在的。

案例

//目标:掌握File对象的创建,来代表具体的文件。
public class FileDemo01 {public static void main(String[] args) {//1. 创建File对象File f1 = new File("D:\\java_project\\resource\\test.jpg");
//        File f1 = new File("D:/java_project/resource/test.jpg");
//        File f1 = new File("E:" + File.separator + "java_project" + File.separator + "resource" + File.separator + "test.jpg");System.out.println(f1.length());// 字节个数//2. File对象可以代表文件,也可以代表文件夹。File f2 = new File("D:\\java_project\\resource");System.out.println(f2.length()); // 拿到的是文件夹本身的大小,不是里面全部内容的大小。//3.File对象的文件路径可以是不存在的File f3 = new File("E:\\a.txt");// 以后可以创建出来//4. File对象的路径可以支持绝对路径,相对路径。// 什么是绝对路径:从盘符开始的路径。(依赖于当前操作系统,适合找特定系统的特定位置的文件)File f4 = new File("D:\\java_project\\resource\\test.jpg");// 什么是相对路径:相对于项目目录的路径。(重点)说白了不带盘符,直接到project(工程)下找文件。// 一般是用来找项目中的资源文件的。很重要File f5 = new File("day08-stream-file-io\\src\\test.jpg");System.out.println(f5.length());}
}

File提供的判断文件类型、获取文件信息功能
image
案例

//目标:掌握File提供的判断文件类型、获取文件信息功能
public class fileTest2 {public static void main(String[] args) {//1. 创建文件对象,指代某个文件File f = new File("D:\\java_project\\resource\\test.jpg");//2. 判断当前文件对象,对应的文件路径是否存在,存在返回tureSystem.out.println(f.exists());//3. 判断当前文件对象指代的是否是文件,是文件返回ture,反之返回falseSystem.out.println(f.isFile());//4. 判断当前文件对象指代的是否是文件夹,是文件夹返回ture,反之返回falseSystem.out.println(f.isDirectory());//5. 获取文件的名称(包含后缀)System.out.println(f.getName());//6. 获取文件大小,返回字节数System.out.println(f.length());//7. 获取文件的最后修改时间long time = f.lastModified();DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss EEE a");// 将时间戳转换为带时区的日期时间对象ZonedDateTime zonedDateTime = Instant.ofEpochMilli(time).atZone(ZoneId.systemDefault()); // 使用系统默认时区,也可指定如ZoneId.of("Asia/Shanghai")// 格式化并输出String formattedTime = dtf.format(zonedDateTime);System.out.println(formattedTime);//8. 获取创建文件对象时,使用的路径System.out.println(f.getPath());//9. 获取绝对路径System.out.println(f.getAbsoluteFile());// 找到真正的相对路径相对到哪里File file = new File("");System.out.println(file.getAbsoluteFile());}
}

File类创建文件的功能
image
File类删除文件的功能
image
注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站。
案例

//目标:掌握File创建和删除文件的相关方法
public class fileTest3 {public static void main(String[] args) throws IOException {File f = new File("D:\\java_project\\resource\\b.txt");//1. 创建一个新文件(文件内容为空),创建成功返回true,否则返回falseSystem.out.println(f.createNewFile());//2. 创建文件夹,注意只能创建一级文件夹。创建成功返回true,否则返回falseFile f2 = new File("D:\\java_project\\resource\\b\\asdf\\zzcv");System.out.println(f2.mkdir());//3.创建文件夹,可以创建多级文件夹(重点)System.out.println(f2.mkdirs());//4. 只能删除文件和空文件夹,不能删除非空文件夹f.delete();f2.delete();}
}

File类提供的遍历文件夹的功能
image

案例

//目标:掌握File提供的遍历文件夹的方法
public class FileTest4 {public static void main(String[] args) {File f = new File("D:\\java_project\\resource");String[] names = f.list();for(String name: names){System.out.println(name);}File[] files = f.listFiles();for(File file: files){System.out.println(file.getAbsoluteFile());}}
}

使用listFiles方法时的注意事项:

  • 当主调是文件,或者路径不存在时,返回null。
  • 当主调是空文件夹时,返回一个长度为0的数组。
  • 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回,包含隐藏文件。
  • 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件。
  • 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null。

什么是方法递归?

  • 递归是一种算法,在程序设计语言中广泛应用。
  • 从形式上说:方法调用自身的形式称为方法递归(recursion)。

递归的形式

  • 直接递归:方法自己调用自己。
  • 间接递归:方法调用其他方法,其他方法又回调方法自己。

使用方法递归时需要注意的问题:

  • 递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。
    案例
//目标:认识递归的形式
public class RecursionTest1 {public static void main(String[] args) {test1(); // 直接递归test2(); // 间接递归}public static void test1(){System.out.println("test1");test1();}public static void test2(){System.out.println("test2");test3();}private static void test3() {test2();}
}

递归的案例-计算n的阶乘
需求:计算n的阶乘,5的阶乘=12345;6的阶乘是12345*6;
分析:

  1. 假如我们认为存在一个公式是f(n)=1234567...(n-1)n;
  2. 那么公式等价形式就是:f(n)=f(n-1)*n
  3. 如果求的是1-5的阶乘的结果,我们手工应该如果应用上述公式计算。
    image
//目标:递归的算法基础:解决求阶乘
public class RecursionTest2 {public static void main(String[] args) {System.out.println(getJieCheng(5));}public static int getJieCheng(int n){if(n == 1) return 1;return getJieCheng(n - 1)* n;//递归}
}

递归算法三要素:

  • 递归的公式:f(n)=f(n-1)*n;
  • 递归的终结点:f(1)
  • 递归的方向必须走向终结点:
    image

案例:猴子吃桃问题

  • 猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。
  • 需求:请问猴子第一天摘了多少个桃子?
//目标:猴子吃桃问题
public class RecursionTest3 {public static void main(String[] args) {//1. 公式 f(x + 1) = f(x) - f(x)/2 -1;//   变形:f(x) = 2f(x+1) + 2//2. 终结点:f(10) = 1//3. 递归的方向:f(1)= ?System.out.println(f(1));}public static int f(int n){if(n == 10) return 1;return 2*f(n + 1) + 2;}
}

案例:文件搜索
需求:从某个盘符下,搜索“QQ.exe”这个文件,找到后直接输出其位置。

//目标:文件搜索
public class RecursionTest4 {public static void main(String[] args) throws IOException {File dir = new File("E:\\");searchFile(dir, "QQ.exe");}/*** 搜索指定目录下的指定文件* @param dir 要搜索的目录* @param fileName 要搜索的文件*/private static void searchFile(File dir, String fileName) throws IOException {//1. 极端判断if(dir == null || !dir.exists() || dir.isFile()){return;}//2. 搜索文件// 提取当前目录下的全部一级文件对象File[] files = dir.listFiles();//3. 判断这个文件夹是否可以提取一级文件对象,以及是否存在一级文件对象,存在才可以搜索if(files == null || files.length == 0) {return;}//4. 遍历一级文件对象for(File file: files){if(file.isFile()){//是文件// 看看这个文件是否就是要查找的if(file.getName().contains(fileName)){System.out.println(file.getAbsolutePath());//启动这个程序Runtime r = Runtime.getRuntime();r.exec(file.getAbsolutePath());return;}}else{//是文件夹// 递归搜索searchFile(file, fileName);}}}
}
http://www.wxhsa.cn/company.asp?id=24

相关文章:

  • 猜灯谜赢大奖系统介绍
  • Linux GNU 工具集详解
  • 基于MATLAB的多输入多输出空时分组码通信系统仿真
  • 国产DevOps工具链崛起:Gitee如何重塑企业研发效能版图
  • docker部署ruoyi-cloud验证码问题记录
  • 【初赛】ip地址 - Slayer
  • 【初赛】反码 补码 原码 - Slayer
  • 本土开发者生态崛起:Gitee如何重塑中国软件研发基础设施
  • Eclipse中创建Maven多模块工程
  • .net code 连接SAP HANA 数据库
  • 面试题记录:分库分表
  • 2025年物流行业CRM解决方案全解析:数字化时代的客户关系管理新范式 - SaaS软件
  • CentOS 上独立编译 Linux 内核一般性流程
  • 西门子分布式IO从站与主站的PN连接
  • 为时序数据库 IoTDB 底层架构“保驾护航”,来听听新晋 Committer 的贡献心路!
  • VU9P板卡设计方案:565-基于VU9P的32@ SFP28+4@ QSFP28路光纤交换板卡
  • 微信小程序语音转文字(插件:微信同声传译)
  • 黑产群控日损百万?设备ID乱象要如何终结?