File类、递归、字节流

一、File类

1.1 概述
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
1.2 构造方法
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
一个File对象代表硬盘中实际存在的一个文件或者目录。
无论该路径下是否存在文件或者目录,都不影响File对象的创建。
1.3 常用方法
获取功能的方法
public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。
判断功能的方法
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
创建删除功能的方法
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete() :删除由此File表示的文件或目录。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
delete方法,如果此File表示目录,则目录必须为空才能删除。
1.4 目录的遍历
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
调用listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历。

二、递归

2.1文件搜索
public class DiGuiDemo3 {
public static void main(String[] args) {
// 创建File对象
File dir = new File(“D:\aaa”);
// 调用打印目录方法
printDir(dir);
}

public static void printDir(File dir) {// 获取子文件和目录File[] files = dir.listFiles();// 循环打印for (File file : files) {if (file.isFile()) {// 是文件,判断文件名并输出文件绝对路径if (file.getName().endsWith(".java")) {System.out.println("文件名:" + file.getAbsolutePath());}} else {// 是目录,继续遍历,形成递归printDir(file);}}
}

}

三、IO概述

3.1 什么是IO
按照流动的方向,以内存为基准,分为输入input 和输出output ,即流向内存是输入流,流出内存的输出流。
Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。
输入也叫做读取数据,输出也叫做作写出数据。
3.2 IO的分类
根据数据的流向分为:输入流和输出流。
输入流 :把数据从其他设备上读取到内存中的流。
输出流 :把数据从内存 中写出到其他设备上的流。
格局数据的类型分为:字节流和字符流。
字节流 :以字节为单位,读写数据的流。
字符流 :以字符为单位,读写数据的流。
3.3 IO的流向
硬盘---->>内存 :输入
内存---->>硬盘 :输出
3.4 顶级父类们
字节流: 字节输入流 inputStream 字节输出流 outputStream
字符流: 字符输入流 Reader 字符输出流Writer

四、字节流

4.1字节输出流【OutputStream】
java.io.OutputStream抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。
它定义了字节输出流的基本共性功能方法。
public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。
public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
public abstract void write(int b) :将指定的字节输出流。
close方法,当完成流的操作时,必须调用此方法,释放系统资源。
4.2 FileOutputStream类
OutputStream有很多子类,我们从最简单的一个子类开始。
java.io.FileOutputStream类是文件输出流,用于将数据写出到文件。
构造方法
public FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件。
public FileOutputStream(String name): 创建文件输出流以指定的名称写入文件。
当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有这个文件,会创建该文件。如果有这个文件,会清空这个文件的数据。
public class FileOutputStreamConstructor throws IOException {
public static void main(String[] args) {
// 使用File对象创建流对象
File file = new File(“a.txt”);
FileOutputStream fos = new FileOutputStream(file);

    // 使用文件名称创建流对象FileOutputStream fos = new FileOutputStream("b.txt");}}

写出字节数据
写出字节:write(int b) 方法,每次可以写出一个字节数据,代码使用演示:
public class FOSWrite {
public static void main(String[] args) throws IOException {
// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream(“fos.txt”);
// 写出数据
fos.write(97); // 写出第1个字节
fos.write(98); // 写出第2个字节
fos.write(99); // 写出第3个字节
// 关闭资源
fos.close();
}
}
输出结果:
abc
虽然参数为int类型四个字节,但是只会保留一个字节的信息写出。
流操作完毕后,必须释放系统资源,调用close方法,千万记得。

** 写出字节数组 **
write(byte[] b),每次可以写出数组中的数据,代码使用演示:
public class FOSWrite {
public static void main(String[] args) throws IOException {
// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream(“fos.txt”);
// 字符串转换为字节数组
byte[] b = “李俊漩”.getBytes();
// 写出字节数组数据
fos.write(b);
// 关闭资源
fos.close();
}
}
** 写出指定长度字节数组:**
write(byte[] b, int off, int len) ,每次写出从off索引开始,len个字节,代码使用演示:
public class FOSWrite {
public static void main(String[] args) throws IOException {
// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream(“fos.txt”);
// 字符串转换为字节数组
byte[] b = “abcde”.getBytes();
// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fos.write(b,2,2);
// 关闭资源
fos.close();
}
}
数据追加续写
经过以上的演示,每次程序运行,创建输出流对象,都会清空目标文件中的数据。如何保留目标文件中数据,还能继续添加新数据呢?
public FileOutputStream(File file, boolean append): 创建文件输出流以写入由指定的 File对象表示的文件。
public FileOutputStream(String name, boolean append): 创建文件输出流以指定的名称写入文件。
这两个构造方法,参数中都需要传入一个boolean类型的值,true 表示追加数据,false 表示清空原有数据。这样创建的输出流对象,就可以指定是否追加续写了,代码使用演示:
public class FOSWrite {
public static void main(String[] args) throws IOException {
// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream(“fos.txt”,true);
// 字符串转换为字节数组
byte[] b = “abcde”.getBytes();
// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fos.write(b);
// 关闭资源
fos.close();
}
}
文件操作前:cd
文件操作后:cdabcde
写出换行
Windows系统里,换行符号是\r\n 。
public class FOSWrite {
public static void main(String[] args) throws IOException {
// 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream(“fos.txt”);
// 定义字节数组
byte[] words = {97,98,99,100,101};
// 遍历数组
for (int i = 0; i < words.length; i++) {
// 写出一个字节
fos.write(words[i]);
// 写出一个换行, 换行符号转成数组写出
fos.write("\r\n".getBytes());
}
// 关闭资源
fos.close();
}
}

输出结果:
a
b
c
d
e
回车符\r和换行符\n :
回车符:回到一行的开头(return)。
换行符:下一行(newline)。
系统中的换行:Windows系统里,每行结尾是 回车+换行 ,即\r\n;
Unix系统里,每行结尾只有 换行 ,即\n;
Mac系统里,每行结尾是 回车 ,即\r。从 Mac OS X开始与Linux统一。

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

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

相关文章

java求期望_Java 11的期望

java求期望过去的几年对Java世界一直是动荡不安的&#xff0c;在相当多的发行版中添加了各种各样的功能。 在开发人员社区中&#xff0c;人们逐渐意识到Java的开发速度不够快。 在最初的20年中&#xff0c;Java平台和Java开发工具包&#xff08;JDK&#xff09;经历了庞大&…

IntelliJ IDEA for Mac 封装字段(添加setter/getter方法)

可以利用 IDEA 对类中的字段进行封装&#xff0c;所谓“字段封装”&#xff0c;就是指通过调用方法的方式来访问字段&#xff0c;而不是直接通过“对象.字段名”的方式去访问。 例如&#xff0c;成员变量 hairColor 是一个 public 的变量&#xff0c;没有相关的 setter/getter…

JDBC预处理对象prepareStatement

JDBC预处理对象prepareStatement概述 一、SQL注入问题 SQL注入&#xff1a;用户输入的内容作为了SQL语句语法的一部分&#xff0c;改变了原有SQL真正的意义。 假设有登录案例SQL语句如下: SELECT * FROM 用户表 WHERE NAME 用户输入的用户名 AND PASSWORD 用户输的密码; 此…

bean包、entity包、mode包、domain包的区别

文章目录beanentitymodeldomain总结bean 包含的都是 JavaBean。 JavaBean 是一种 Java 语言写成的可重用组件。为写成 JavaBean&#xff0c;类必须是具体和公共的&#xff0c;并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成属性。Jav…

java修改数据历史记录_记录更新(Java数据类)

java修改数据历史记录最近几个月&#xff0c;有一些与“ Java数据类”&#xff08;又称为“记录”&#xff09;有关的更新。 正如我在“ JavaFX&#xff0c;Valhalla&#xff0c;数据类和Java的浮点更新 ”一文中简短提到的那样&#xff0c; Brian Goetz的“ Java数据类 ”“探…

idea配置Maven的本地仓库(打开新的项目时自动更新本地仓库的位置)

配置Maven的本地仓库 一、打开目录然后选择 Other Settings → Settings for New Projects 二、配置自己的文件路径和本地仓库 三、设置每次自动更新本地仓库

java导出数据透视表_使用数据库中的Java流制作数据透视表

java导出数据透视表来自数据库行和表的原始数据不能为人类读者提供太多了解。 相反&#xff0c;如果我们对数据执行某种聚合&#xff0c;则人类更有可能看到数据模式 在向我们展示之前。 数据透视表是聚合的一种特定形式&#xff0c;我们可以在其中应用排序&#xff0c;求平均…

Java程序和MySQL数据库中关于小数的保存问题

文章目录MySQL 中的小数类型decimaldoublefloatJava 中的小数类型floatdoubleBigDecimal金额的计算MySQL 中的小数类型 decimal MySQL 使用 decimal 保存高精度的小数&#xff0c;可以设置保留的小数个数。decimal(m,d)&#xff0c;表示该值一共显示 m 位整数&#xff0c;其中…

javafx 遮罩_JavaFX技巧31:遮罩/剪切/ Alpha通道

javafx 遮罩选择条 最近&#xff0c;我不得不实现一个自定义控件&#xff0c;该控件使用户可以从项目列表中选择一个项目。 此“ SelectionStrip”控件必须水平放置项目&#xff0c;并且在项目过多的情况下&#xff0c;允许用户左右水平滚动。 该控件将在空间受限的区域中使用&…

IntelliJ IDEA for Mac如何查看某个方法的实现

如果没有子类&#xff0c;按住 Command&#xff0c;鼠标点击方法名会跳到声明定义方法的地方&#xff1b;如果是接口或者父类&#xff0c;那么只会跳至接口或者父类声明方法的地方&#xff0c;想要看子类的实现&#xff0c;可以点击鼠标右键&#xff0c;选择 【Go To】 -> 【…

日志管理工具_您需要了解的6种日志管理工具(以及如何使用它们)

日志管理工具如果没有正确的工具来汇总和解析您的日志数据&#xff0c;则几乎不可能找到并了解所需的信息。 日志有无穷的用途&#xff0c;因为日志本身是无止境的。 应用程序日志&#xff0c;安全日志&#xff0c;BI日志&#xff0c; 林肯日志 &#xff08;好吧&#xff0c;也…

Spring半注解半Xml

一、 Component 1.Component 标记了注解&#xff0c; 默认的名称是&#xff1a;简单类名&#xff0c;首字母小写UserDaoImpl -> userDaoImplUserServiceImpl -> userServiceImplComponent可以使用value属性指定对象的名称&#xff0c;相当bean标签的id属性 Component注解…

JDK 命令之 javadoc -- 生成API文档

文章目录命令简介命令选项中文乱码javadoc 命令实例进入源代码文件所在目录&#xff0c;解析指定的源代码文件&#xff0c;生成 API 文档解析指定包下的所有源码文件&#xff0c;生成 API 文档指定源文件根目录&#xff0c;再指定具体的包路径&#xff0c;解析其中的源码文件&a…

apache.camel_带有Spring Boot 2支持的Apache Camel 2.22发布

apache.camel今天&#xff0c;我们发布了最新的Apache Camel 2.22.0版本 &#xff0c;这是第一个正式完全支持Spring Boot 2的版本。这是一项重大的工作&#xff0c;因为针对像Apache Camel这样的大型框架将Spring Boot v1升级到v2付出了很多努力–感谢骆驼队和他们的贡献。 对…

纯注解的开发

使用纯注解开发 目录结构 JdbcConfiguration package com.itheima.Config;import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import org.springframework.beans.factory.annotation.Value; import org.springframework.co…

IntelliJ IDEA forMac 如何生成项目的javadoc(API文档)

1.在菜单栏&#xff0c;点击 Tools -> Generate JavaDoc… 2.根据你自己的需要&#xff0c;设置解析源文件的范围、设置文档输出目录、设置资源的访问权限范围、字符编码、堆内存大小等。

vaadin_Vaadin Flow –奇妙的鹿

vaadin您可能知道&#xff0c;Vaadin是Java上最受欢迎的Web框架之一&#xff1a; https://zeroturnaround.com/rebellabs/java-web-frameworks-index-by-rebellabs/ https://javapipe.com/hosting/blog/best-java-web-frameworks/ 最近发布了此Web UI开发框架的新版本– Vaa…

Spring和Junit整合

一、引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency>二、在测试类中修改 &#xff08;1&#xff09;不带有配置文件的修改…

什么是stub文件_stub code

存根, 占位代码&#xff0c;占坑代码&#xff0c;桩代码&#xff0c;粘合代码&#xff0c;残存代码, 指满足形式要求但没有实现具体功能的占坑/代理代码。 stub code 给出的实现是临时性的/待编辑的。它使得程序在结构上能够符合标准&#xff0c;又能够使程序员可以暂时不编辑…

子类重写父类变量_为什么在子类中不重写超类的实例变量

子类重写父类变量当我们在父类和子类中创建一个具有相同名称的变量&#xff0c;并尝试使用持有子类对象的父类引用访问它时&#xff0c;我们会得到什么&#xff1f; 为了理解这一点&#xff0c;让我们考虑下面的示例&#xff0c;在该示例中&#xff0c;我们在Parent和Child类中…