IO操作解析:从数据持久化到File类的原理和应用
IO概述

回想一下我之前写过的过程是在记忆中。程序运行后,这些数据就消失了。等待下一次要使用这些数据,但是它消失了。我应该怎么办?您可以保存所有计算的数据吗?当下一个程序启动时,请阅读这些数据并继续使用它?实际上,为了存储数据持久性,除了内存之外,还必须将数据存储在内存中,以将数据存储到其他持久设备(硬盘,光盘,U磁盘等)之外。
需要此操作才能将数据存储在持久设备上的存储器中,作为输出(写入)输出操作。当将持久设备上的数据读取到输入(读取)输入操作时。因此,我们将此输入和输出操作称为IO操作。
文件类
文件类是文件文件和目录路径的抽象表示。也就是说,将文件或目录(文件夹)封装在Java中的文件对象中。换句话说,如果我们要在硬盘上操作文件,否则文件夹只能找到文件。因此,我们必须在可以操作文件或文件夹的文件类中研究这些功能?
文件类的构造函数
通过构造方法创建文件对象,我们将证明:
包装inter;
导入java.io.file;
公共类演示{
公共静态void main(string [] args){{{
//文件构造函数演示
字符串pathName =“ e:\\ java_code \\ hello.java”;
文件f1 = new File(pathName); //将Test22文件封装到文件对象中。笔记;您可以不包装文件或文件夹即可成为对象。
system.out.println(f1);
文件f2 =新文件(“ e:\\ java_code”,“ hello.java”);
System.out.println(F2);
//将油漆包装到文件对象中。
文件dir =新文件(“ e:\\ java_code”);
文件f3 =新文件(dir,“ hello.java”);
System.out.println(F3);
// e:\ java_code \ overlo.java
// e:\ java_code \ hello.java
// e:\ java_code \ hello.java
获取文件类
创建文件对象后,文件类中有常见的方法,可以获取与文件相关的信息
该方法演示如下:
包装inter;
导入java.io.file;
公共类演示{
公共静态void main(string [] args){{{
//创建文件对象
文件文件=新文件(“ demo.java”);
//获取文件的绝对路径,即完整路径
字符串abspath = file.getabsolutepath();
//文件中封装的路径是什么。
字符串路径= file.getPath();
//获取文件名
字符串fileName = file.getName();
//获取文件大小
长尺寸= file.length();
system.out.println(“ abspath =”+abspath);
system.out.println(“ path =”+path);
system.out.println(“ filename =”+filename);
system.out.println(“ size =”+size);
// abspath = f:\编程语言\ java \ project \ project \ typeinfo \ demo.java
//path=demo.java
//filename = demo.java
// size = 0
创建文件和文件夹等的删除。
通常在上面介绍的情况下,我们知道您可以通过文件获得诸如文件名,文件路径(目录)和其他信息之类的信息。接下来说明使用文件类用来创建和删除文件。代码演示:
包装inter;
导入java.io.file;
导入java.io.ioexception;
公共类演示{
pbble静态变化
//操作文件或文件。
文件文件=新文件(“ f:\\ file.txt”);
//创建文件。如果文件不存在,则如果文件存在,则创建true,并且不会创建false。如果路径是错误的,请进行ioexception。
boolean b1 = file.createnewfile();
system.out.println(“ b1 =” + b1);
// ----------删除文件操作--------------注意:不要访问回收站。谨慎使用-------
boolean b2 = file.delete();
system.out.println(“ b2 =” + b2);
// ------------您需要确定文件是否存在----------------
boolean b3 = file.exists();
system.out.println(“ b3 =” + b3);
// ---------------------------------------------------------------------------------------------------删除 - ---------------
文件dir =新文件(“ f:\\ abc”);
// mkdir()创建一个单一目录。
boolean b4 = dir.mkdir();
system.out.println(“ b4 =” + b4);
文件dir1 = new文件(“ f:\\ abcd \\ ef \\ gh”);
//dir.mkdirs();创建一个多层目录
boolean b5 = dir1.mkdirs();
system.out.println(“ b5 =” + b5);
//删除目录时,如果目录中存在内容,则无法直接删除。
boolean b6 = dir.delete();
//仅在删除目录的内容后,请确保目录为空。此时可以删除此目录。
system.out.println(“ b6 =” + b6);
// ------------------------------------------------------------------------- -----------------------
文件f =新文件(“ f:\\ javahaha”); //要确定它是文件还是目录,您必须首先判断存在。
// f.mkdir(); // f.createnewfile();
system.out.println(f.Isfile());
system.out.println(f.isdirectory());
// b1 = true
// b2 = true
// b3 = false
// b4 = true
// b5 = true
// b6 = true
// 错误的
// 错误的
ListFiles()方法简介
这些文件存储在目录(文件夹)中,因此如何将目录中的所有文件或文件夹中的所有文件或文件夹获取?
该方法演示如下:
包装inter;
导入java.io.file;
公共类演示{
公共静态void main(string [] args){{{
文件dir =新文件(“ f:\\源代码学习”);
//在目录中获取当前文件和文件夹名称。
字符串[]名称= dir.list();
for(字符串名称:名称){
system.out.println(name);
//在目录中获取当前文件和文件对象。只要获得文件对象,您就可以获取所需的信息
file [] files = dir.listfiles();
对于(文件文件:文件){
system.out.println(file);
//ace-amaster.zip
// nfine -nfine -amaster
//nfine-nfine-amaster.zip
// Sugarsite-Master
//sugarsite-amaster.zip
// Taskmanager-Master
//taskmanager-amaster.zip
//webdemo.rar
// websocket聊天室
//时机框架演示源代码
//操作日志
//通过秋天的开源项目
// F:\源代码Learning \ Ace-Master.zip
// f:\源代码学习\ nfine-nfine-Master
// f:\源代码学习\ nfine-nfine-amaster.zip
// F:\源代码学习\ Sugarsite-Master
// F:\源代码学习\ Sugarsite-Master.zip
// F:\源代码学习\ Taskmanager-Master
// f:\源代码学习\ taskmanager-master.zip
// f:\源代码学习\ webdemo.rar
// f:\源代码学习\ websocket聊天室
// f:\源代码学习\时间框架演示源代码
// f:\源代码学习\操作日志
// f:\源代码学习\开源项目通过秋季
注意:在指定目录中获取文件或文件夹时,必须满足以下两个条件
文件过滤器
通过ListFiles()方法,我们可以在目录中获取所有文件和文件夹,但是我们可以过滤吗?例如,我们是否只需要目录中指定的扩展名的文件,还是包含某些关键字的文件夹?我们可以先将所有文件和文件夹首先获取,然后遍历当前采集的所有内容。筛选在遍历期间进行了筛选,但是此动作有些麻烦。 Java为我们提供了解决此问题的相应功能。检查文件API,在审核过程中查找文件类中的ListFiles方法,然后接受指定的过滤器。
测试课
导入java.io.file;
导入java.io.filenamefilter;
公共课程测试{
公共静态void main(string [] args){{{
//获取扩展名称.java所有文件
//创建文件对象
文件文件=新文件(“ f:\\源代码学习”);
//用指定的扩展名获取文件。由于所有文件均已筛选,因此呼叫方法需要传递过滤器
file [] files = file.listfiles(new MyFileFilter());
//通过遍历获得的所有合格文件
对于(文件f:files){
system.out.println(f);
类MyFileFilter实现FileNameFilter {
public boolean accept(file dir,string name){{{
返回名称。Endswith(“。zip”);
// F:\源代码Learning \ Ace-Master.zip
// f:\源代码学习\ nfine-nfine-amaster.zip
// F:\源代码学习\ Sugarsite-Master.zip
// f:\源代码学习\ taskmanager-master.zip
自固定类继承了FileNameFilter滤波器接口
在检查API时,我们发现在ListFiles(FileFilter Filter)中,您也可以接受FileFilter过滤器。它和我们谈论文件名偏置的区别是什么?
当我们需要过滤文件名时,我们可以使用FilenameFilter过滤器。当我们要过滤当前文件或文件夹时,我们可以使用fileFilter。例如,当前目录中的所有文件夹都需要使用FileFilter过滤器。
测试课
导入java.io.file;
导入java.io..filefilter;
公共课程测试{
公共静态void main(string [] args){{{
//获取扩展名称.java所有文件
//创建文件对象
文件文件=新文件(“ f:\\源代码学习”);
//在指定目录中获取文件夹
file [] files = file.listfiles(new fileterbydir());
//通过遍历获得的所有合格文件
对于(文件f:files){
system.out.println(f);
//自定义类继承FileFilter过滤器接口
//文件过滤器
class filefileterbydir实现filefilter {
public boolean accept(file pathname){
return pathName.isdirectory();
// f:\源代码学习\ nfine-nfine-Master
// F:\源代码学习\ Sugarsite-Master
// F:\源代码学习\ Taskmanager-Master
// f:\源代码学习\ websocket聊天室
// f:\源代码学习\时间框架演示源代码
// f:\源代码学习\操作日志
// f:\源代码学习\开源项目通过秋季
递归
识别是指在当前方法中调用这种现象。有两种类型的递归类型,直接递归和间接递归。直接称呼自己为自己的方法。间接递归可以调用方法B方法B,B方法B方法C方法,C方法C方法A方法。
递归代码演示,计算1-N的总和,完成递归
公共类diguidemo {
公共静态void main(string [] args){{{
//计算1〜NUM的总和,使用递归完成
int n = 5;
int sum = getsum(n);
system.out.println(sum);
公共静态int getum(int n){
如果(n == 1){
返回1;
返回n + getsum(n-1);
注意:递归必须受到限制,以确保可以停止递归递归,否则堆栈内存溢出将发生。尽管递归条件有限,但递归时间的数量不应太多。否则,将发生堆栈内存溢出。
在所有子目录中递归打印文件路径
编写一种在指定目录中打印文件路径的方法并调用该方法。要求:如果指定的目录具有子目录,则打印目录中的文件路径。
代码演示
导入java.io.file;
公共课程测试{
公共静态void main(string [] args){{{
文件文件=新文件(“ f:\\源代码学习\\ nfine -nfine -amaster \\ nfine”);
getfileall(file);
//获取指定目录和儿童目录中的所有文件
public static void getfileall(文件文件){
文件[]文件= file.listfiles();
//遍历当前目录中的所有文件和文件夹
对于(文件f:files){
//确定当前遍历是否是目录
if(f.isdirectory()){{
//是目录,继续获取此目录中的所有文件和文件夹
getfileall(f);
} 别的 {
//不是目录,这意味着当前F是文件,然后打印它
system.out.println(f);