JAVA进阶学习12

文章目录

  • 一、File类
    • 1.1 File对象的构造
    • 1.2 File对象的常见方法
      • 判断功能的方法
      • 获取功能的方法
      • 绝对路径和相对路径
      • 创建删除功能的方法
    • 1.3 ==File的常用遍历方法==
    • 1.4 File获取并遍历的其他方法
    • 1.5 用法举例
    • 二、IO流
    • 2.1 IO的分类
    • 2.2 字节流的方法概述
      • 2.2.1 FileOutputStream
      • 2.2.2 FileInputStream

一、File类

File对象主要是为了对文件进行简单的处理和存储

1.1 File对象的构造

构造File对象的时候既可以有路径,也可以没有
在这里插入图片描述

public static void main(String[] args) {//1.根据字符串表示的路径,变成File对象String str = "C:\\Users\\Desktop\\a.txt";File f1 = new File(str);System.out.println(f1);//C:\Users\Desktop\a.txt//2.父级路径:C:\Users\Desktop//子级路径:a.txtString parent = "C:\\Users\\Desktop";String child = "a.txt";File f2 = new File(parent,child);System.out.println(f2);//C:\Users\Desktop\a.txtFile f3 = new File(parent + "\\" + child); //可以替代方法二System.out.println(f3);//C:\Users\Desktop\a.txt//3.把一个File表示的路径和String表示路径进行拼接File parent2 = new File("C:\\Users\\Desktop");String child2 = "a.txt";File f4 = new File(parent2,child2);System.out.println(f4);//C:\Users\Desktop\a.txt}

注意:此时new只是生成了File对象,还需要用创建方法将其实实在在地创建在电脑的内存中

1.2 File对象的常见方法

判断功能的方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。

方法演示,代码如下:

public class FileIs {public static void main(String[] args) {File f = new File("d:\\aaa\\bbb.java");File f2 = new File("d:\\aaa");// 判断是否存在System.out.println("d:\\aaa\\bbb.java 是否存在:"+f.exists()); //d:\aaa\bbb.java 是否存在:trueSystem.out.println("d:\\aaa 是否存在:"+f2.exists()); //d:\aaa 是否存在:true// 判断是文件还是目录System.out.println("d:\\aaa 文件?:"+f2.isFile()); //d:\aaa 文件?:falseSystem.out.println("d:\\aaa 目录?:"+f2.isDirectory()); //d:\aaa 目录?:true}
}

获取功能的方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。

  • public String getPath() :将此File转换为路径名字符串。

  • public String getName() :返回由此File表示的文件或目录的名称。

  • public long length() :返回由此File表示的文件的长度。

    方法演示,代码如下:

  public class FileGet {public static void main(String[] args) {File f = new File("d:/aaa/bbb.java");     System.out.println("文件绝对路径:"+f.getAbsolutePath()); //文件绝对路径:d:\aaa\bbb.javaSystem.out.println("文件构造路径:"+f.getPath()); //文件构造路径:d:\aaa\bbb.javaSystem.out.println("文件名称:"+f.getName()); //文件名称:bbb.javaSystem.out.println("文件长度:"+f.length()+"字节"); //文件长度:636字节File f2 = new File("d:/aaa");     System.out.println("目录绝对路径:"+f2.getAbsolutePath()); //目录绝对路径:d:\aaaSystem.out.println("目录构造路径:"+f2.getPath()); //目录构造路径:d:\aaaSystem.out.println("目录名称:"+f2.getName()); //目录名称:aaaSystem.out.println("目录长度:"+f2.length()); //目录长度:4096}}

API中说明:
length()获取文件的大小,单位是字节,该方法不能获取文件夹的大小
getName()的调用者是文件夹返回文件夹的名字,若是文件返回文件名加文件的扩展名

绝对路径和相对路径

  • 绝对路径:从盘符开始的路径,这是一个完整的路径。
  • 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。
public class FilePath {public static void main(String[] args) {// D盘下的bbb.java文件File f = new File("D:\\bbb.java");System.out.println(f.getAbsolutePath());// 项目下的bbb.java文件File f2 = new File("bbb.java");System.out.println(f2.getAbsolutePath());}
}
输出结果:
D:\bbb.java
D:\idea_project_test4\bbb.java

创建删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • public boolean delete() :删除由此File表示的文件或目录。
  • public boolean mkdir() :创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

方法演示,代码如下:

public class FileCreateDelete {public static void main(String[] args) throws IOException {// 文件的创建File f = new File("aaa.txt");System.out.println("是否存在:"+f.exists()); // falseSystem.out.println("是否创建:"+f.createNewFile()); // trueSystem.out.println("是否存在:"+f.exists()); // true// 目录的创建File f2= new File("newDir");	System.out.println("是否存在:"+f2.exists());// falseSystem.out.println("是否创建:"+f2.mkdir());	// trueSystem.out.println("是否存在:"+f2.exists());// true// 创建多级目录File f3= new File("newDira\\newDirb");System.out.println(f3.mkdir());// falseFile f4= new File("newDira\\newDirb");System.out.println(f4.mkdirs());// true// 文件的删除System.out.println(f.delete());// true// 目录的删除System.out.println(f2.delete());// trueSystem.out.println(f4.delete());// false}
}

注意

  1. createNewFile():
    如果当前路径的文件不存在创建成功,存在则创建失败
    如果父级路径不存在会产生IOException的异常
    该方法创建的一定是文件,不会是文件夹(可以是一个没有后缀名的文件)
  2. mkdir():
    路径的创建一定是惟一的
    该方法每次只能创建单级文件夹,多级文件夹会创建失败
  3. mkdirs():
    在底层会先尝试创建单级文件夹
  4. delete():
    可以删除文件或文件夹
    如果此File表示目录,则目录必须为空才能删除

1.3 File的常用遍历方法

在这里插入图片描述

public static void main(String[] args) {//public File[] listFiles()       获取当前该路径下所有内容//1.创建File对象File f = new File("D:\\aaa");//2.listFiles方法//作用:获取aaa文件夹里面的所有内容,把所有的内容放到数组中返回File[] files = f.listFiles();for (File file : files) {//file依次表示aaa文件夹里面的每一个文件或者文件夹System.out.println(file);}}

在这里插入图片描述

1.4 File获取并遍历的其他方法

在这里插入图片描述

  public static void main(String[] args) {/*public static File[] listRoots()                列出可用的文件系统根public String[] list()                          获取当前该路径下所有内容public String[] list(FilenameFilter filter)     利用文件名过滤器获取当前该路径下所有内容(掌握)public File[] listFiles()                获取当前该路径下所有内容public File[] listFiles(FileFilter filter)      利用文件名过滤器获取当前该路径下所有内容public File[] listFiles(FilenameFilter filter)  利用文件名过滤器获取当前该路径下所有内容*///1.listRoots  获取系统中所有的盘符File[] arr = File.listRoots();System.out.println(Arrays.toString(arr));//[C:\, D:\]//2.list()    获取当前该路径下所有内容(仅仅能获取名字)File f1 = new File("D:");String[] arr2 = f1.list();for (String s : arr2) {System.out.println(s);}//注意其返回的是string类型的数组//3.list(FilenameFilter filter)  利用文件名过滤器获取当前该路径下所有内容//需求:我现在要获取D:\\aaa文件夹里面所有的txt文件File f2 = new File("D:\\aaa");//accept方法的形参,依次表示aaa老肉肉文件夹里面每一个文件或者文件夹的路径//参数一:父级路径//参数二:子级路径//返回值:如果返回值为true,就表示当前路径保留//        如果返回值为false,就表示当前路径舍弃不要String[] arr3 = f2.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File src = new File(dir,name);return src.isFile() && name.endsWith(".txt");}});System.out.println(Arrays.toString(arr3));}

1.5 用法举例

1 创建文件

public static void main(String[] args) throws IOException {//需求:在当前模块下的aaa文件夹中创建一个a.txt文件//1.设置a.txt的父级路径File file = new File("myfile\\aaa");//2.创建父级路径//如果aaa是存在的,那么此时创建失败的。//如果aaa是不存在的,那么此时创建成功的。file.mkdirs();//3.拼接父级路径和子级路径File src = new File(file,"a.txt");boolean b = src.createNewFile();if(b){System.out.println("创建成功");}else{System.out.println("创建失败");}}

2 判断文件类型

判断当前目录中是否有txt文件
File[] files = file.listFiles();
//遍历数组获取里面的每一个元素
for (File f : files) {//f:依次表示aaa文件夹里面每一个文件或者文件夹的路径if(f.isFile() && f.getName().endsWith(".txt")){return true;}
}

3 删除文件夹的通用方式
前面所讲的delete只能删除空的文件夹或文件

/** 作用:删除src文件夹* 参数:要删除的文件夹* */public static void delete(File src){//1.先删除文件夹里面所有的内容//进入srcFile[] files = src.listFiles();//遍历for (File file : files) {//判断,如果是文件,删除if(file.isFile()){file.delete();}else {//判断,如果是文件夹,就递归delete(file);}}//2.当前文件夹为空时,删除自己src.delete();

二、IO流

IO流指的是数据的传输流,按照流动的方向,以内存为基准,分为输入input输出output ,即流向内存是输入流,流出内存的输出流。
Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。

2.1 IO的分类

根据数据的流向分为:输入流输出流

  • 输入流 :把数据从其他设备上读取到内存中的流。
  • 输出流 :把数据从内存 中写出到其他设备上的流。

格局数据的类型分为:字节流字符流

  • 字节流 :以字节为单位,读写数据的流,针对所有类型的文件。
  • 字符流 :以字符为单位,读写数据的流,针对纯文本文件。
    在这里插入图片描述
    其中的四个蓝框中的类都是抽象类,在使用时常使用其子类

2.2 字节流的方法概述

一切文件在存储时,都是以一个一个的字节二进制数字的形式保存,同理在传输时也是以二进制比特的形式存储的。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。

2.2.1 FileOutputStream

它是OutputStream的子类,即对该抽象类的具体实现

该类的基础用法

 public static void main(String[] args) throws IOException {/*字节输出流的细节:1.创建字节输出流对象细节1:参数是字符串表示的路径或者是File对象都是可以的细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。细节3:如果文件已经存在,则会清空文件2.写数据细节:write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符97-->a                  3.释放资源每次使用完流之后都要释放资源,否则该文件会一直被java占用*///1.创建对象FileOutputStream fos = new FileOutputStream("D:\\a.txt");//2.写出数据fos.write(97);fos.write(55);//3.释放资源fos.close();//while(true){}//让程序不断保持运行去看看他的运行情况}

FileOutputStream的三种写出方式

public static void main(String[] args) throws IOException {/*void write(int b)                       一次写一个字节数据void write(byte[] b)                    一次写一个字节数组数据void write(byte[] b, int off, int len)  一次写一个字节数组的部分数据数组     起始索引    个数*///1.创建对象FileOutputStream fos = new FileOutputStream("myio\\a.txt");//2.写出数据fos.write(97); // afos.write(98); // bbyte[] bytes = {97, 98, 99, 100, 101};fos.write(bytes);fos.write(bytes,1,2);// b c//3.释放资源fos.close();}

换行和续写

public static void main(String[] args) throws IOException {/*换行写:再次写出一个换行符就可以了windows: \r\n回车换行符老肉肉Linux:    \nMac:      \r细节:/在windows操作系统当中,java对回车换行进行了优化。虽然完整的是\r\n,但是我们写其中一个\r或者\n,java也可以实现换行,因为java在底层会补全。续写:如果想要续写,打开续写开关即可开关位置:创建对象的第二个参数默认false:表示关闭续写,此时创建对象会清空文件手动传递true:表示打开续写,此时创建对象不会清空文件*///1.创建对象FileOutputStream fos = new FileOutputStream("D:\\a.txt",true);//此处的参数表示追加写//2.写出数据String str = "zaixiedain";byte[] bytes1 = str.getBytes();fos.write(bytes1);//再次写出一个换行符就可以了String wrap = "\r\n";byte[] bytes2 = wrap.getBytes();fos.write(bytes2);String str2 = "666";byte[] bytes3 = str2.getBytes();fos.write(bytes3);//3.释放资源fos.close();}

2.2.2 FileInputStream

用于将文件中的数据读取出来

基本的文件读取

public static void main(String[] args) throws IOException {/** 实现步骤:*       创建对象*       读取数据*       释放资源* */      //1.创建对象FileInputStream fis = new FileInputStream("myio\\a.txt");//2.读取数据int b1 = fis.read();System.out.println((char)b1);int b2 = fis.read();System.out.println((char)b2);int b3 = fis.read();System.out.println((char)b3);int b4 = fis.read();System.out.println((char)b4);int b5 = fis.read();System.out.println((char)b5);int b6 = fis.read();//当读到的数据为空时返回-1System.out.println(b6);//-1//3.释放资源fis.close();}

注意

  1. 如果文件不存在,在读取时会直接报错
  2. 每次读取一个字符,读完后指针自动后移,读到空时返回-1

循环读取

int b;//此处需要自定义一个第三方变量记录读取的值
while ((b = fis.read()) != -1) {System.out.println((char) b);
}

如果在程序中同时开启多个流进行操作,一般先创建的流最后释放

IO流的多行读取
在读取时一次可以进行多行的读取,增加读写的速度(含参的读对象)
在这里插入图片描述

//1.创建对象
FileInputStream fis = new FileInputStream("myio\\a.txt");
//2.读取数据
byte[] bytes = new byte[2];
//一次读取多个字节数据,具体读多少,跟数组的长度有关
//返回值:本次读取到了多少个字节数据
int len = fis.read(bytes);
System.out.println(len);//2
String str1 = new String(bytes,0,len);
System.out.println(str1);

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

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

相关文章

如何配置Memcached以减少对数据库的直接访问

如何配置Memcached以减少对数据库的直接访问 1. 引言 在现代应用程序中,数据库通常是性能瓶颈的主要来源之一。通过使用Memcached,开发者可以显著减少数据库的负载,提高应用程序的响应速度。本文将详细介绍如何配置Memcached,以…

UE4-字体导入

一.字体导入 方法一: 然后通过导入将自己想要的字体导入到项目中,也可以直接将我们放在桌面的字体直接拖入到我们的内容浏览器中。 但是要注意想要发售游戏的话不可以这样导入微软的字体,因为Windows自带基本都有版权,所以最…

odoo17创建一个默认UI视图

XML 数据文件 当要加载的数据具有简单格式时,CSV 格式很方便。当格式更复杂时(例如,加载视图或电子邮件模板的结构),我们使用 XML 格式。例如,此帮助字段包含 HTML 标记。虽然可以通过 CSV 文件加载此类…

明星应援系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,线上应援管理,线下应援管理,应援物品管理,购买订单管理,集资应援管理,集资订单管理,市集订单管理&#xff0…

极致竞争思维

老板请了几个毕业生,培训了一年,他们现在对业务的熟悉程度比我都熟悉多了,只是基本功不扎实,做出来的东西有很多问题。 老板请我来,给了我一个硬件总监的位置,实际上是要对他的整个系统做出诊断。 也是难为…

【QT】线程控制和同步

目录 概述 QThread常用API 线程使用 创建一个QThread的子类 主线程启动线程 线程安全 互斥锁 QMutex 使用示例:两个线程一个共享静态变量进行 线程子类创建 主线程调用 QMutexLocker 条件变量 信号量 概述 在 Qt 中,多线程的处理⼀般是…

【CSS in Depth 2 精译_020】3.3 元素的高度

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

【proteus经典实战】定时器控制交通灯指示灯

一、简介 基于8051系列单片机实现,旨在模拟一个简单的交通灯系统,实现红、黄、绿灯的交替亮灭。使用了特殊功能寄存器(SFR)和位操作来控制硬件,使用定时器0的中断功能来控制交通灯信号的切换。通过软件控制&#xff0…

解决selenium打印保存为PDF时图片未加载成功的问题

使用selenium打印网页时,如果程序运行很快的话,可能会导致图片没有加载成功即进行了保存,出现这个问题最初的思考是在执行打印任务时使用js进行强制等待,后发现实现效果并不好。在加载页面时使用自动下滑的方式将网页拉到底&#…

uniapp动态计算并设置元素高度

<template><view><scroll-view id"sv-box" :scroll-y"true" :style"{height:navHeightpx}"></scroll-view><view id"btn-box"><button>取消</button><button>确认</button><…

Linux Vim教程(三):插入模式与命令模式

目录 1. Vim的基本模式介绍 2. 插入模式 2.1 进入插入模式 2.2 退出插入模式 2.3 插入模式下的快捷键 2.4 插入模式中的光标移动 3. 命令模式 3.1 进入命令模式 3.2 常用命令 3.3 搜索和替换 3.4 其他有用的命令 3.5 配置与优化 3.5.1 自动补全 3.5.2 自定义快捷…

【前后端联调】HttpMessageNotReadableException

【前后端联调】HttpMessageNotReadableException 01 问题描述 在前后端联调时产生的问题&#xff0c;关键是下面这句翻译JSON解析错误&#xff1a;无法构造“java.util.ArrayList”的实例 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse …

记录贴-NGINX相关

链接: NGINX相关配置信息说明

在 CI/CD 中怎么使用 Docker 部署前端项目?

本项目代码已开源&#xff0c;具体见&#xff1a; 前端工程&#xff1a;vue3-ts-blog-frontend 后端工程&#xff1a;express-blog-backend 数据库初始化脚本&#xff1a;关注公众号程序员白彬&#xff0c;回复关键字“博客数据库脚本”&#xff0c;即可获取。 前言 在上一篇文…

Web Pages 表单

Web Pages 表单 介绍 Web pages 表单是现代网页设计中不可或缺的组成部分&#xff0c;它们允许用户与网站进行交互&#xff0c;提交信息&#xff0c;如注册、登录、反馈、预订等。表单的设计和功能对用户体验和网站的业务目标有着直接的影响。本文将深入探讨Web pages表单的各…

快速上手AI指令:打造个性化智能交互体验的全面指南

快速上手AI指令&#xff1a;打造个性化智能交互体验的全面指南 一、初识文心一言1.1 文心一言简介1.2 文心一言的特点 二、准备工作2.1 获取访问权限2.2 熟悉界面布局2.3 了解基础指令 三、基础指令操作3.1 问答互动3.2 文本创作3.3 任务规划 四、进阶指令操作4.1 复杂查询4.2 …

Python酷库之旅-第三方库Pandas(035)

目录 一、用法精讲 106、pandas.Series.iloc方法 106-1、语法 106-2、参数 106-3、功能 106-4、返回值 106-5、说明 106-6、用法 106-6-1、数据准备 106-6-2、代码示例 106-6-3、结果输出 107、pandas.Series.__iter__魔法方法 107-1、语法 107-2、参数 107-3、…

Java程序的故障排查

文章目录 Linux命令关机/重启/注销系统信息和性能查看磁盘和分区⽤户和⽤户组⽹络和进程管理常⻅系统服务命令⽂件和⽬录操作⽂件查看和处理打包和解压RPM包管理命令YUM包管理命令DPKG包管理命令APT软件⼯具 JDK命令jpsjstatjinfojmapjhatjstackjcmdjconsole 分析工具VisualVME…

ios 设置行距和获取文本行数

设置文本行距 UILabel *label [[UILabel alloc] init];label.font [UIFont systemFontOfSize:12];label.numberOfLines 0;label.lineBreakMode NSLineBreakByWordWrapping;label.textColor [UIColor colorWithHexString:"B3B3B3"];label.text textDes;//设置行…

blender和3dmax和maya和c4d比较

Blender、3ds Max、Maya和Cinema 4D (C4D)都是强大的3D建模和动画软件&#xff0c;但它们各有特点和适用领域。以下是它们的比较&#xff1a; Blender: 开源免费全面的功能&#xff0c;包括建模、动画、渲染、视频编辑等学习曲线较陡峭&#xff0c;但社区支持强大适合独立艺术家…