博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。
以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】
一、java.io
1.18 File
在 Java 中,File 类用于表示文件或目录的路径。它提供了一组方法,使得可以查询文件或目录的属性、创建新的文件或目录,删除文件或目录,以及获取文件列表等操作。以下是关于 File 类的主要信息:
File 类介绍:
-
包路径:
java.io
File 类所有字段:
File 类没有定义任何字段。
File 类构造方法:
-
File(String pathname):-
根据给定的路径名字符串创建一个新的
File实例。
-
-
File(String parent, String child):-
根据指定的父路径名字符串和子路径名字符串创建一个新的
File实例。
-
-
File(File parent, String child):-
根据指定的父抽象路径名和子路径名字符串创建一个新的
File实例。
-
File 类方法摘要:
以下是 File 类中一些主要的方法:
-
文件路径相关方法:
-
String getPath(): 返回File对象的路径名字符串。 -
String getAbsolutePath(): 返回File对象的绝对路径名字符串。 -
String getParent(): 返回File对象的父目录的路径名字符串。 -
File getParentFile(): 返回File对象的父目录的抽象路径名。 -
String getName(): 返回File对象的名称。
-
-
文件状态相关方法:
-
boolean exists(): 测试此抽象路径名表示的文件或目录是否存在。 -
boolean isFile(): 测试此抽象路径名表示的文件是否是一个标准文件。 -
boolean isDirectory(): 测试此抽象路径名表示的文件是否是一个目录。 -
boolean canRead(): 测试应用程序是否可以读取此抽象路径名表示的文件。 -
boolean canWrite(): 测试应用程序是否可以修改此抽象路径名表示的文件。
-
-
文件操作方法:
-
boolean createNewFile(): 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 -
boolean mkdir(): 创建由此抽象路径名命名的目录。 -
boolean mkdirs(): 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。 -
boolean delete(): 删除由此抽象路径名表示的文件或目录。
-
-
文件列表方法:
-
String[] list(): 返回一个字符串数组,这些字符串指定了由此抽象路径名表示的目录中的文件和目录。 -
File[] listFiles(): 返回一个抽象路径名数组,这些路径名表示由此抽象路径名表示的目录中的文件和目录。
-
-
其他方法:
-
boolean renameTo(File dest): 重新命名由此抽象路径名表示的文件。 -
long lastModified(): 返回由此抽象路径名表示的文件最后一次被修改的时间。 -
long length(): 返回由此抽象路径名表示的文件的长度(以字节为单位)。
-
简单使用例子:
以下是一个简单的例子,演示了如何使用 File 类创建、查询和删除文件:
javaCopy code
import java.io.File;
import java.io.IOException;
public class FileExample {
public static void main(String[] args) {// 创建一个新文件File newFile = new File("example.txt");
try {if (newFile.createNewFile()) {System.out.println("File created: " + newFile.getAbsolutePath());} else {System.out.println("File already exists.");}
// 查询文件属性System.out.println("File name: " + newFile.getName());System.out.println("File path: " + newFile.getPath());System.out.println("Absolute path: " + newFile.getAbsolutePath());System.out.println("Is directory? " + newFile.isDirectory());System.out.println("Is file? " + newFile.isFile());System.out.println("File length: " + newFile.length() + " bytes");
// 删除文件if (newFile.delete()) {System.out.println("File deleted.");} else {System.out.println("Unable to delete file.");}} catch (IOException e) {e.printStackTrace();}}
}
在这个例子中,我们首先创建一个 File 对象表示一个名为 "example.txt" 的文件,然后通过 createNewFile() 方法创建文件。接着,我们查询文件的一些属性,并最后使用 delete() 方法删除文件。请注意,实际应用中可能需要处理异常情况,例如文件已存在或文件无法创建等情况。
应用场景
File 类主要用于表示文件和目录的路径,并提供一组方法用于查询和操作文件系统。以下是一些 File 类的常见应用场景:
-
文件和目录的创建、查询和删除:
-
使用
File类可以轻松地创建新的文件或目录,查询文件属性(如路径、大小、是否为目录等),以及删除文件或目录。
javaCopy code File newFile = new File("example.txt"); // 创建文件 newFile.createNewFile(); // 查询文件属性 System.out.println("File name: " + newFile.getName()); System.out.println("Is directory? " + newFile.isDirectory()); System.out.println("File length: " + newFile.length() + " bytes"); // 删除文件 newFile.delete(); -
-
目录中文件列表的获取:
-
使用
list()或listFiles()方法可以获取目录中的文件列表,从而遍历目录中的文件和子目录。
javaCopy code File directory = new File("my_directory"); // 获取目录中的文件列表 String[] fileList = directory.list(); File[] fileArray = directory.listFiles(); // 遍历文件列表 for (File file : fileArray) {System.out.println("File name: " + file.getName()); } -
-
文件和目录的操作:
-
File类提供了一些方法,如renameTo()用于重命名文件,mkdir()和mkdirs()用于创建目录。
javaCopy code File oldFile = new File("old_name.txt"); File newFile = new File("new_name.txt"); // 重命名文件 oldFile.renameTo(newFile); // 创建目录 File newDirectory = new File("new_directory"); newDirectory.mkdir(); // 创建目录,包括父目录 File nestedDirectory = new File("parent/child/grandchild"); nestedDirectory.mkdirs(); -
-
文件的最后修改时间和大小的查询:
-
使用
lastModified()方法可以获取文件的最后修改时间,而length()方法可以获取文件的大小。
javaCopy code File file = new File("example.txt"); // 获取最后修改时间 long lastModifiedTime = file.lastModified(); // 获取文件大小 long fileSize = file.length(); -
-
文件是否可读或可写的检查:
-
使用
canRead()和canWrite()方法可以检查文件是否可读和可写。
javaCopy code File file = new File("example.txt"); // 检查文件是否可读 boolean isReadable = file.canRead(); // 检查文件是否可写 boolean isWritable = file.canWrite(); -
总体而言,File 类广泛用于文件和目录的操作,包括文件的创建、查询、删除,目录中文件列表的获取,文件的属性查询等。这些功能使得 File 类在文件系统操作中非常有用。在实际应用中,我们通常会使用 java.nio.file 包中的更先进的文件操作 API,但 File 类仍然是许多传统文件操作场景的良好选择。
实战例子
在实际项目中,File 类可以用于处理文件和目录的各种操作。以下是一个简单的项目实战例子,假设有一个日志系统,需要将日志信息写入文件,并定期进行日志归档。
首先,创建一个 LogWriter 类,负责将日志信息写入文件:
javaCopy code
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class LogWriter {
private File logFile;
public LogWriter(String logFileName) {this.logFile = new File(logFileName);initializeLogFile();}
private void initializeLogFile() {try {if (logFile.createNewFile()) {System.out.println("Log file created: " + logFile.getAbsolutePath());}} catch (IOException e) {e.printStackTrace();}}
public void writeLog(String message) {try (FileWriter fileWriter = new FileWriter(logFile, true)) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String timestamp = dateFormat.format(new Date());
fileWriter.write("[" + timestamp + "] " + message + "\n");System.out.println("Log written: " + message);} catch (IOException e) {e.printStackTrace();}}
}
然后,创建一个 LogArchiver 类,负责定期归档日志文件:
javaCopy code
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.text.SimpleDateFormat;
import java.util.Date;
public class LogArchiver {
private static final String LOG_DIRECTORY = "logs";private static final String ARCHIVE_DIRECTORY = "archives";
public void archiveLogs() {try {// 创建日志和归档目录createDirectoryIfNotExists(LOG_DIRECTORY);createDirectoryIfNotExists(ARCHIVE_DIRECTORY);
// 获取当前日期作为归档目录名SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");String archiveDirectoryName = ARCHIVE_DIRECTORY + File.separator + dateFormat.format(new Date());
// 创建归档目录createDirectoryIfNotExists(archiveDirectoryName);
// 获取当前日志文件路径String currentLogFileName = LOG_DIRECTORY + File.separator + "log.txt";Path currentLogFilePath = Path.of(currentLogFileName);
// 构造归档目录下的归档文件路径String archiveLogFileName = archiveDirectoryName + File.separator + "log.txt";Path archiveLogFilePath = Path.of(archiveLogFileName);
// 移动日志文件到归档目录Files.move(currentLogFilePath, archiveLogFilePath, StandardCopyOption.REPLACE_EXISTING);System.out.println("Logs archived to: " + archiveLogFilePath);} catch (IOException e) {e.printStackTrace();}}
private void createDirectoryIfNotExists(String directoryName) throws IOException {File directory = new File(directoryName);if (!directory.exists() && directory.mkdirs()) {System.out.println("Directory created: " + directory.getAbsolutePath());}}
}
最后,创建一个 Main 类,演示如何使用 LogWriter 记录日志,并使用 LogArchiver 定期归档日志文件:
javaCopy code
public class Main {
public static void main(String[] args) {LogWriter logWriter = new LogWriter("logs/log.txt");
// 写入日志logWriter.writeLog("Log entry 1");logWriter.writeLog("Log entry 2");
// 定期归档日志LogArchiver logArchiver = new LogArchiver();logArchiver.archiveLogs();}
}
在这个例子中,LogWriter 类用于将日志写入文件,LogArchiver 类用于定期归档日志文件。这是一个简单的项目实战例子,实际项目中可能会涉及更多的日志处理和配置。