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,一经查实,立即删除!

相关文章

UE4-字体导入

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

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

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

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

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

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

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

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

快速上手AI指令:打造个性化智能交互体验的全面指南 一、初识文心一言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…

自动驾驶-预测概览

通过生成一条路径来预测一个物体的行为,在每一个时间段内,为每一辆汽车重新计算预测他们新生成的路径,这些预测路径为规划阶段做出决策提供了必要信息 预测路径有实时性的要求,预测模块能够学习新的行为。我们可以使用多源的数据…

超简单安装指定版本的clickhouse

超简单安装指定版本的clickhouse 命令执行shell脚本 idea连接 命令执行 参考官网 # 下载脚本 wget https://raw.githubusercontent.com/183461750/doc-record/d988dced891d70b23c153a3bbfecee67902a3757/middleware/data/clickhouse/clickhouse-install.sh # 执行安装脚本(中…

【漏洞复现】Netgear WN604 downloadFile.php 信息泄露漏洞(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR(网件)公司生产的无线接入器(或无线路由器)提供Wi-Fi保护协议(WPA2-PSK, WPA-PSK),以及有线等效加密(WEP)64位、128位和152…

亲测--linux下安装ffmpeg最新版本---详细教程

下载地址 Download FFmpeg 下载最新的https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.xz 上传到服务器 解压 tar xvf ffmpeg-7.0.1.tar.xz 编译 cd ffmpeg-7.0.1 ./configure --prefix=/usr/local/ffmpeg make && make install 报错: 解决:在后面加 跳过检测…

【Word】——小技巧

1.PDF相关转换word PDF转换成Word在线转换器 - 免费 - CleverPDF 2. word插入公式 1.软件推荐(免费) 可直接将图片,截屏公式转为word标准规范形式 2.网址推荐 在线LaTeX公式编辑器-编辑器 (每天有免费使次数) 3.…

Matlab演示三维坐标系旋转

function showTwo3DCoordinateSystemsWithAngleDifference() clear all close all % 第一个三维坐标系 origin1 [0 0 0]; x_axis1 [1 0 0]; y_axis1 [0 1 0]; z_axis1 [0 0 1];% 绕 x 轴旋转 30 度的旋转矩阵 theta_x 30 * pi / 180; rotation_matrix_x [1 0 0; 0 cos(th…

Linux服务器配置Python+PyTorch+CUDA深度学习环境

参考博主 Linux服务器配置PythonPyTorchCUDA深度学习环境_linux cuda环境配置-CSDN博客 https://blog.csdn.net/NSJim/article/details/115386936?ops_request_misc&request_id&biz_id102&utm_termlinux%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83%E6%8C%89pytorch%20…

4核16G服务器支持多少人?4C16G服务器性能测评

租赁4核16G服务器费用,目前4核16G服务器10M带宽配置70元1个月、210元3个月,那么能如何呢?配置为ECS经济型e实例4核16G、按固定带宽10Mbs、100GB ESSD Entry系统盘。 那么问题来了,4C16G10M带宽的云服务器可以支持多少人同时在线&…

C++ ───List的使用

目录 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 1.1 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&…

2024年汉字小达人比赛区级活动学校选拔的题型预测和真题示例

上一篇文章,好真题网为大家介绍了2024年上海市小学生汉字小达人比赛活动的轮次、举办日期、参赛对象、报名方式、费用和如何备考的建议等。 有家长朋友问汉字小达人考试的内容和范围是什么,有哪些题型,以及汉字小达人比赛和上海市小学生古诗…

PDF压缩软件电脑版 电脑pdf压缩怎么压缩文件

在数字化时代,pdf文件因其良好的兼容性和稳定性,已成为工作与生活中不可或缺的文件格式。然而,随着内容的增多,pdf文件的体积也随之增大,给文件的传输和存储带来了一定的困扰。本文将为你详细介绍如何在电脑上压缩pdf文…

关于Redis的最常见的十道面试题

面试题一:Redis为什么执行这么快? Redis运行比较快主要原因有以下几种: 纯内存操作:Redis将所有数据存储在内存中,这意味着对数据的读写操作直接在内存中运行,而内存的访问速度远远高于磁盘。这种设计使得…

LNMP架构部署及应用

部署LNMP架构流程 1.安装Nginx(上传软件包,执行脚本) yum -y install pcre-devel zlib-devel gcc gcc useradd -M -s /sbin/nologin nginx tar zxf nginx-1.12.0.tar.gz cd nginx-1.12.0 ./configure --prefix/usr/local/nginx --usernginx…