当前位置: 首页 > news >正文

Java IO教程之Java 文件一口气讲完!( *︾▽︾)

Java 文件

Java IO教程 - Java文件

File类的对象是文件或目录的路径名的抽象表示。

创建文件

我们可以从中创建一个 File 对象

  • 路径名
  • 父路径名和子路径名
  • URI(统一资源标识符)

我们可以使用File类的以下构造函数之一创建一个文件:

File(String pathname)
File(File parent, String child)
File(String parent, String child)
File(URI uri)

如果我们有一个文件路径名字符串test.txt,我们可以创建一个抽象路径名作为下面的代码。

File dummyFile = new File("test.txt");

名为test.txt的文件不必存在,以使用此语句创建File对象。

dummyFile对象表示抽象路径名,它可能指向或可能不指向文件系统中的真实文件。

File类有几个方法来处理文件和目录。

使用File对象,我们可以创建新文件,删除现有文件,重命名文件,更改文件的权限等。

File类中的isFile()和isDirectory()告诉File对象是否表示文件或目录。

当前工作目录

JVM的当前工作目录是根据我们如何运行java命令来设置的。

我们可以通过读取user.dir系统属性来获取JVM的当前工作目录,如下所示:

String  workingDir = System.getProperty("user.dir");

使用System.setProperty()方法更改当前工作目录。

System.setProperty("user.dir", "C:\\myDir");

要在Windows上指定C:\\ test作为user.dir系统属性值,我们运行如下所示的程序:

java -Duser.dir=C:\test your-java-class

文件的存在

我们可以使用File类的exists()方法检查File对象的抽象路径名是否存在。

boolean fileExists = dummyFile.exists();

完整源代码

import java.io.File;public class Main {public static void main(String[] argv) {// Create a File objectFile dummyFile = new File("dummy.txt");// Check for the file"s existenceboolean fileExists = dummyFile.exists();if (fileExists) {System.out.println("The dummy.txt  file exists.");} else {System.out.println("The dummy.txt  file does  not  exist.");}}
}

上面的代码生成以下结果。

路径

绝对路径在文件系统上唯一标识文件。规范路径是唯一标识文件系统上文件的最简单路径。

我们可以使用getAbsolutePath()和getCanonicalPath()方法来分别获得由File对象表示的绝对路径和规范路径。

import java.io.File;
import java.io.IOException;public class Main {public static void main(String[] args) {printFilePath("dummy.txt");printFilePath(".." + File.separator + "notes.txt");}public static void printFilePath(String pathname) {File f = new File(pathname);System.out.println("File  Name: " + f.getName());System.out.println("File  exists: " + f.exists());System.out.println("Absolute Path: " + f.getAbsolutePath());try {System.out.println("Canonical Path: " + f.getCanonicalPath());}catch (IOException e) {e.printStackTrace();}}
}

上面的代码生成以下结果。

文件分隔符

不同的操作系统使用不同的字符来分隔路径名中的两个部分。

例如,Windows在路径名中使用反斜杠(\)作为名称分隔符,而UNIX使用正斜杠(/)。

File类定义了一个名为分隔符Char的常量,它是系统相关的名称分隔符。

我们可以使用File.separator Char常量来获取名称分隔符作为字符。

File.separator 常量将我们的名称分隔符作为String。

在程序中使用名称分隔符将使您的Java代码在不同的平台上工作。

Java 文件操作

Java IO教程 - Java文件操作

文件创建

我们可以使用File类的createNewFile()方法创建一个新文件:

File dummyFile = new File("test.txt");
boolean fileCreated  = dummyFile.createNewFile();

该createNewFile()方法创建一个新的空文件,如果有指定名称的文件不存在。

如果文件已成功创建,则返回true;否则,返回false。如果发生I/O错误,该方法将抛出IOException。

我们还可以在默认的临时文件目录或目录中创建一个临时文件。要在默认临时目录中创建临时文件,请使用File类的createTempFile()静态方法,该方法接受前缀和后缀以生成临时文件名。

File  tempFile = File.createTempFile("abc", ".txt");

文件夹创建

我们可以使用mkdir()或mkdirs()方法创建一个新目录。

仅当路径名中指定的父目录已存在时,mkdir()方法才创建目录。

File newDir  = new File("C:\\users\\home");

只有当C:\users目录已经存在时,newDir.mkdir()方法才会创建主目录。

newDir.mkdirs()方法将创建users目录(如果它不存在于C:驱动器中),它将在C:\users目录下创建主目录。

文件删除

我们需要使用File类的delete()方法来删除文件/目录。

目录必须为空,我们才能删除它。

如果文件/目录被删除,该方法返回true; 否则,返回false。

我们还可以延迟删除文件,直到JVM通过使用deleteOnExit()方法终止。

如果我们在程序中创建临时文件,当程序退出时要删除,这将非常有用。

立即删除dummy.txt文件

File dummyFile = new File("dummy.txt"); 
dummyFile.delete();

在JVM终止时删除dummy.txt文件

File dummyFile = new File("dummy.txt"); 
dummyFile.deleteOnExit();

文件重命名

要重命名文件,我们可以使用renameTo()方法,它使用一个File对象来表示新文件:

boolean fileRenamed = oldFile.renameTo(newFile);

完整的源代码

import java.io.File;public class Main {public static void main(String[] argv) {// Rename old-dummy.txt to new_dummy.txtFile oldFile = new File("old_dummy.txt");File newFile = new File("new_dummy.txt");boolean fileRenamed = oldFile.renameTo(newFile);if (fileRenamed) {System.out.println(oldFile + "  renamed  to " + newFile);} else {System.out.println("Renaming " + oldFile + "  to " + newFile+ "  failed.");}}
}

如果文件的重命名成功,renameTo()方法返回true;否则,返回false。

我们需要检查返回值,以确保重命名成功。

上面的代码生成以下结果。

例子

File对象是不可变的。创建后,它始终表示相同的路径名。当我们重命名文件时,旧的File对象仍然代表原始的路径名。

File对象表示路径名,而不是文件系统中的实际文件。

以下代码显示了如何进行文件创建,删除和重命名。

import java.io.File;public class Main {public static void main(String[] args) throws Exception {File newFile = new File("my_new_file.txt");printFileDetails(newFile);// Create a new fileboolean fileCreated = newFile.createNewFile();if (!fileCreated) {System.out.println(newFile + "  could   not  be  created.");}printFileDetails(newFile);// Delete the new filenewFile.delete();System.out.println("After deleting the new file:");printFileDetails(newFile);// recreate the filenewFile.createNewFile();printFileDetails(newFile);// Let"s tell the JVM to delete this file on exitnewFile.deleteOnExit();System.out.println("After  using deleteOnExit() method:");printFileDetails(newFile);// Create a new file and rename itFile firstFile = new File("my_first_file.txt");File secondFile = new File("my_second_file.txt");fileCreated = firstFile.createNewFile();if (fileCreated || firstFile.exists()) {printFileDetails(firstFile);printFileDetails(secondFile);boolean renamedFlag = firstFile.renameTo(secondFile);if (!renamedFlag) {System.out.println("Could not  rename  " + firstFile);}printFileDetails(firstFile);printFileDetails(secondFile);}}public static void printFileDetails(File f) {System.out.println("Absolute Path: " + f.getAbsoluteFile());System.out.println("File exists:  " + f.exists());}
}

上面的代码生成以下结果。

文件属性

File类包含让我们获取/设置文件和目录的属性的方法。

我们可以设置分别使用setReadOnly(),setReadable(),setWritable()和setExecutable()方法将文件设置为只读,可读,可写和可执行。

我们可以使用lastModified()和setLastModified()方法来获取和设置文件的最后修改日期和时间。

我们可以使用isHidden()方法检查文件是否被隐藏。

文件大小

我们可以使用File类的length()方法获取文件的大小(以字节为单位)。

File myFile  = new File("myfile.txt");
long  fileLength = myFile.length();

如果File对象表示不存在的文件,则length()方法返回零。

length()方法的返回类型是long,而不是int。

列出文件和目录

我们可以使用File类的listRoots()静态方法获取文件系统中可用根目录的列表。 它返回一个File对象数组。

File[] roots = File.listRoots();

以下代码显示如何列出所有可用的根目录。

import java.io.File;public class Main {public static void main(String[] args) {File[] roots = File.listRoots();System.out.println("List  of  root directories:");for (File f : roots) {System.out.println(f.getPath());}}
}

我们可以使用File类的list()或listFiles()方法列出目录中的所有文件和目录。

list()方法返回一个String数组,而listFiles()方法返回一个File数组。

我们还可以使用这些方法的文件过滤器从返回的结果中排除一些文件和目录。

以下代码显示如何列出目录中的所有文件和目录。

import java.io.File;public class Main {public static void main(String[] args) {// Change the dirPath value to list files from your directoryString dirPath = "C:\\";File dir = new File(dirPath);File[] list = dir.listFiles();for (File f : list) {if (f.isFile()) {System.out.println(f.getPath() + "  (File)");} else if (f.isDirectory()) {System.out.println(f.getPath() + "  (Directory)");}}}
}

上面的代码生成以下结果。

文件过滤器

要从列表中排除扩展名为.SYS的所有文件,我们可以使用由功能接口FileFilter的实例表示的文件过滤器来实现。

它包含一个accept()方法,它将File作为参数列出,如果应该列出文件,则返回true。返回false不会列出文件。

以下代码创建一个文件过滤器,将过滤扩展名为.SYS的文件。

FileFilter filter = file ->  {if (file.isFile()) {String fileName   = file.getName().toLowerCase();if (fileName.endsWith(".sys"))  {return false;}}return true;
};

以下代码创建两个文件过滤器 - 一个仅过滤文件,另一个仅过滤目录:

// Filters only  files
FileFilter fileOnlyFilter = File::isFile;// Filters only  directories
FileFilter  dirOnlyFilter = File::isDirectory;

以下代码显示如何使用FileFilter过滤文件。

import java.io.File;
import java.io.FileFilter;public class Main {public static void main(String[] args) {String dirPath = "C:\\";File dir = new File(dirPath);// Create a file filter to exclude any .SYS fileFileFilter filter = file -> {if (file.isFile()) {String fileName = file.getName().toLowerCase();if (fileName.endsWith(".sys")) {return false;}}return true;};File[] list = dir.listFiles(filter);for (File f : list) {if (f.isFile()) {System.out.println(f.getPath() + "  (File)");} else if (f.isDirectory()) {System.out.println(f.getPath() + "  (Directory)");}}}
}

上面的代码生成以下结果。

相关文章:

Java IO教程之Java 文件一口气讲完!( *︾▽︾)

Java 文件 Java IO教程 - Java文件 File类的对象是文件或目录的路径名的抽象表示。 创建文件 我们可以从中创建一个 File 对象 路径名父路径名和子路径名URI(统一资源标识符) 我们可以使用File类的以下构造函数之一创建一个文件: File(…...

如何在 Ubuntu 24 上安装 Vmware Tools

原文 Vmware Tools作用 增强图形显示性能 分辨率适配 可使虚拟机的分辨率能够自动适应窗口大小的变化。当您调整 VMware 软件窗口的大小时,Ubuntu 24 虚拟机的屏幕分辨率会随之自动调整,为用户提供更好的视觉体验,方便在不同的使用场景下进…...

内网穿透:如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)

内网穿透:如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)-含详细原理配置说明介绍 前言 远程桌面协议(RDP, Remote Desktop Protocol)可用于远程桌面连接,Windows系统(家庭版除外)也是支持这种协议的,无需安装…...

明星作家都在使用的电子书制作工具,现在向大家介绍

​在数字化时代,电子书已经成为了广大读者和作家的新宠。越来越多的作家开始尝试将手中的文字作品转化为电子书,以便在更广泛的平台上推广和传播。那么,如何高效、便捷地制作电子书呢?今天,我们就来为大家揭秘一款明星…...

简单认识Maven 3-认识pop.Xml配置文件中的代码

pom.xml是 Maven 项目的核心配置文件&#xff0c;它包含了项目的各种配置信息&#xff0c;以下是对其主要内容含义的认识&#xff1a; 一、项目基本信息 <groupId>&#xff1a; 定义项目的组织或团体的唯一标识符&#xff0c;通常采用反向域名的格式。例如&#xff0c;“…...

LangChain4j系列—OpenAI开发实例

一、引入Maven依赖 1、纯Java <dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.35.0</version> </dependency> 2、Spring boot <dependency><groupId&g…...

Java 中简化操作集合的方法

在日常 Java 开发中&#xff0c;我们经常需要操作集合&#xff0c;如 List、Set 和 Map。虽然 Java 提供了丰富的集合框架供开发者使用&#xff0c;但在实际编写业务逻辑时&#xff0c;如何简化集合操作、提高代码可读性和效率&#xff0c;依然是一个经常遇到的问题。特别是随着…...

ArcGIS Pro SDK (十七)宗地结构

ArcGIS Pro SDK (十七)宗地结构 环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0 宗地结构 1 获取活动记录 string errorMessage = await QueuedTask.Run(() => {...

D. Co-growing Sequence

传送门&#xff1a;Problem - 1547D - Codeforces 题意&#xff1a;给定一个 数组 a , 构造一个数组 b &#xff0c;使得 ( a[i] ^ b[i] ) & ( a[i 1] ^ b[ i 1] ) a[i] ^ b[i] 思路&#xff1a;&#xff08;二进制题目&#xff09; 设 a[i] ^ b[i] t 我们要让…...

docker配置加速器

阿里云 控制台》容器镜像服务》镜像工具》镜像加速器 复制地址&#xff1a;https://ywtoq7bz.mirror.aliyuncs.com 到&#xff1a;etc/docker下&#xff1a;vi daemon.json 格式&#xff1a; { "registry-mirrors": ["加速器地址"] } 注&#xff1…...

JS事件和DOM

1. DOM 1.1 基本概念 DOM&#xff0c;全称 Document Object Model&#xff0c;即文档对象模型。它是 Web 上最常用的 API 之一&#xff0c;是加载在浏览器中的文档模型&#xff0c;可以将文档表示为节点树&#xff08;或称 DOM 树&#xff09;&#xff0c;其中每个节点代表文…...

CAS 详解

目录 Java 中 CAS 是如何实现的? CAS 算法存在哪些问题? ABA 问题 循环时间长开销大 只能保证一个共享变量的原子操作 Java 中 CAS 是如何实现的? 在 Java 中&#xff0c;实现 CAS&#xff08;Compare-And-Swap, 比较并交换&#xff09;操作的一个关键类是Unsafe。 Un…...

AI大模型那么火,教你一键Modelarts玩转开源LlaMA(羊驼)大模型

近日&#xff0c; LlaMA(羊驼) 这个大模型再次冲上热搜&#xff01; LLaMA&#xff08;Large Language Model Meta AI&#xff09;&#xff0c;由 Meta AI 发布的一个开放且高效的大型基础语言模型&#xff0c;共有 7B、13B、33B、65B&#xff08;650 亿&#xff09;四种版本。…...

Spring AI Alibaba: 支持国产大模型的Spring ai框架

Spring AI &#xff1a;java做ai应用的最好选择 过去&#xff0c;Java在AI应用开发方面缺乏一个高效且易于集成的框架&#xff0c;这限制了开发者快速构建和部署智能应用程序的能力。 Spring AI正是为解决这一问题而生&#xff0c;它提供了一套统一的接口&#xff0c;使得AI功…...

ChatGPT4o、o1 谁才是最佳大模型?

如何选择合适的 ChatGPT 模型&#xff1f;OpenAI 更新细节与 GPTs 的深入解析 随着人工智能的发展&#xff0c;ChatGPT 已成为众多用户的强大助手&#xff0c;广泛应用于写作、编程、学习和商业等多个领域。然而&#xff0c;面对 OpenAI 提供的众多模型&#xff08;如 GPT-4、…...

[笔记] 关于CreateProcessWithLogonW函数创建进程

函数介绍 https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-createprocesswithlogonw BOOL CreateProcessWithLogonW([in] LPCWSTR lpUsername,[in, optional] LPCWSTR lpDomain,[in] …...

Ubuntu的Qt编译环境配置

1、找不到C和C编译器 利用run文件安装QT6.8.0和QT5.12.2版本后&#xff0c;打开QtCreator时&#xff0c;找不到编译器。 可在终端中查找gcc和g版本&#xff0c;如果没有就安装。 gcc --version g --version 如果没有就安装&#xff1a; sudo apt-get install gcc sudo apt-…...

12 django管理系统 - 注册与登录 - 登录

为了演示方便&#xff0c;我就直接使用models里的Admin来演示&#xff0c;不再创建用户模型了。 ok&#xff0c;先做基础配置 首先是在base.html中&#xff0c;新增登录和注册的入口 <ul class"nav navbar-nav navbar-right"><li><a href"/ac…...

2020年计算机网络408真题解析

第一题&#xff1a; 解析&#xff1a;OSI参考模型网络协议的三要素 网络协议的三要素&#xff1a;语法 &#xff0c;语义&#xff0c;同步&#xff08;时序&#xff09; 语法&#xff1a;定义收发双方所交换信息的格式 语法&#xff1a;定义收发双方所要完成的操作 网页的加载 …...

速盾:cdn高防服务器防火墙的特性是什么?

CDN高防服务器防火墙是一种专门为互联网应用提供安全防护的网络安全设备。它采用先进的技术和算法&#xff0c;通过对网络流量进行过滤和检测&#xff0c;以防止恶意攻击和非法访问&#xff0c;保障网络服务的可用性和安全性。CDN高防服务器防火墙的特性主要包括以下几个方面&a…...

小程序分包和预加载

一、目的 分包的目的&#xff1a; 提升小程序的首屏加载速度&#xff0c;其原理和PC端网页的路由懒加载非常类似。即当我们第一个打开一个小程序的时候&#xff0c;只加载主包以及一些公共的资源&#xff0c;当调到某个页面的时候&#xff0c;在加载该页面所在的分包&#xf…...

【MATLAB 串口调试+虚拟串口测试】

文章目录 前言一、matlab 串口二、测试串口1.从系统中获取串口号2.避免串口打开被占用3. 安装虚拟串口4. 打开串口助手和MATALB 进行测试 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 提示&#xff1a;以下是本篇文章正文…...

mac 安装最新版nginx

1. clone最新版本源代码&#xff1a; git clone https://github.com/nginx/nginx.git 2. 下载PCRE 没有PCRE那我们就下&#xff0c;下载地址&#xff1a;https://sourceforge.net/projects/pcre/files/pcre/&#xff0c;笔者下载的pcre-8.45.zip&#xff0c;下载之后解压到ngi…...

极氪汽车困局:营销频繁车、产品力不足

“ 极氪汽车的“车上吃火锅”营销活动虽登上热搜&#xff0c;但因频繁忽视老用户和产品力不足的争议&#xff0c;并未赢得消费者好感&#xff0c;反而加剧负面印象。 ” 科技新知 原创 作者丨颜瞾 编辑丨蕨影 近日&#xff0c;背靠吉利集团的极氪…...

Icecream 与 Python 日志库及性能分析整合指南

简介 Icecream 是一个用于简化 Python 调试过程的库&#xff0c;它允许开发者轻松打印变量名和它们的值。Python 的 logging 库则提供了一个强大的日志记录系统&#xff0c;用于跟踪应用程序的运行情况。而性能分析则是评估代码执行效率的重要手段。本指南将介绍如何将 Icecre…...

请解读下面的程序:pat =re.compile(r‘\d+‘)res = pat.search(‘www.ddd996.com‘)res.group()

请解读下面的程序&#xff1a; pat re.compile(r\d) res pat.search(www.ddd996.com) res.group() 这段程序使用了正则表达式模块re来搜索字符串中的数字。首先&#xff0c;通过re.compile函数创建了一个正则表达式对象pat&#xff0c;该正则表达式是r\d&#xff0c;意味着匹…...

Fibonacci任意一位的值得算法

csDP写法 using System; class Program {static void Main(string[] args){Console.WriteLine("请输入一个非负整数&#xff1a;");// 读取用户输入while(true){string input Console.ReadLine();int n Convert.ToInt32(input);if (n < 0){Console.WriteLine(&…...

gbn,sr和tcp的区别

这是关于三种不同协议&#xff08;GBN、SR、TCP&#xff09;处理传输时序和丢包的行为比较。我们可以分别填充并解释它们的处理机制&#xff1a; GBN&#xff08;Go-Back-N&#xff09;协议&#xff1a; 类型发送方的计时器保存的是啥接收方收到失序的分组怎么办超时的时候发…...

FastGPT本地开发 之 通过Navicat管理MongoDB、PostgreSQL数据库

1. 背景 前期已经完成FastGPT的本地化部署工作&#xff0c;通过Docker启动FastGPT的相关容器即可运行。&#xff08;共6个容器&#xff09; 2.本地化开发 2.1 前置依赖 2.2 源码拉取 git clone gitgithub.com:labring/FastGPT.git2.3 数据库管理 本地化运行的FastGPT使用…...

hardhat部署智能合约

Hardhat安装 安装node 可以使用 nvm 安装node GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions 安装Hardhat 打开命令行工具&#xff0c;输入&#xff1a; mkdir hardhat-demo cd hardhat-demo npm i…...