目录
友情提醒:
先看目录,了解文章结构,点击目录可跳转到文章指定位置。
第一章、快速了解文件路径
1.1)什么是文件路径?
文件路径:是指向文件或目录(文件夹)在存储系统中的位置的标识符。通过文件路径,操作系统可以找到并访问该文件或目录。文件路径可以是绝对的,也可以是相对的。
1.1.1)绝对路径
绝对路径从根目录开始,一直到达目标文件或目录的完整路径。它包含了从根目录到目标文件或目录的所有目录名,绝对路径是固定的
Windows系统中的绝对路径:
java
C:\Users\Username\Documents\file.txt
在Unix/Linux/macOS系统中的绝对路径:
java
/home/username/documents/file.txt
两者的目录分隔符有区别
java
在Windows中是\,在Unix/Linux/macOS中是/
1.1.2)相对路径
相对路径是从当前工作目录,开始到目标文件或目录的路径。它不包含从根目录开始的完整路径,而是相对于当前目录的位置。因此,相对路径可能因当前工作目录的不同而有所不同。
如果file.txt文件位于test子目录中,相对路径则是:
java
test/file.txt
1.2)重要:相对路径的表示方法
1.2.1) ./ 与 .../
./代表当前目录
java
./:代表当前目录。例如你在一个名为project的目录中,./指 project目录本身。
./file.txt:表示当前目录下的 file.txt 文件。
./subdir/:表示当前目录下的 subdir 子目录。
.../表示上一级目录
java
../:表示上一级目录(也称为父目录)
../file.txt:表示上一级目录中的 file.txt 文件。
../subdir/:表示上一级目录中的 subdir 子目录。
1.3)文件路径与环境变量
1.3.1)什么是环境变量
环境变量定义是操作系统路径、文件名等。环境变量命令行中直接引用,也可以被操作系统中的程序或脚本引用。例如Windows系统中常见的环境变量包括:
java
%USERPROFILE%:表示当前用户的主目录路径,如C:\Users\用户名。
%TEMP%:表示系统的临时文件夹路径,如C:\Users\用户名\AppData\Local\Temp。
%WINDIR%或%WINDOWS%:表示Windows安装目录的路径,如C:\Windows。
在Unix/Linux/macOS中:
java
$HOME:表示当前用户的主目录路径,如/home/用户名。
$PATH:表示可执行文件的搜索路径,由多个目录通过冒号:分隔。
使用echo $PATH
查看path中包含的路径:
在使用命令时,系统按照 PATH 中定义的路径逐个查找,直到找到对应的执行文件。例如当安装了Java的jdk,执行javac命令
时发现不可用,此时需要将jdk的安装目录添加到PATH中,使执行javac命令时能够通过PATH变量包含的路径查找。
1.3.2)环境变量设置举例
第二章、操作系统的文件路径
2.1)常用文件路径
2.1.1)Windows操作系统目录
目录 | 解释 |
---|---|
C: | C盘是系统盘,用于安装操作系统(如Windows)以及系统相关的文件和程序 |
D: | D盘是操作系统的逻辑分区,通常用户的个人数据保存在非系统盘上。 |
C:\Users<username> | 用户的主目录,其中是用户的登录名。 |
C:\Windows | Windows系统文件存放的目录。 |
C:\Program Files | 安装的程序文件通常存放在此目录下。 |
2.1.2)Linux操作系统目录
目录 | 解释 |
---|---|
/ | 表示根目录 |
/home | 用户主目录的基点,例如用户user的主目录就是/home/user。 |
/tmp | 公用的临时文件存储点。 |
/root | 系统管理员的主目录。 |
/etc | 系统管理和配置文件存放的目录。 |
/bin、/sbin、/usr/bin | 存放可执行文件的目录。 |
/etc/hosts | 表示根目录下的 etc 文件夹中的 hosts 文件。 |
~ | 表示当前用户的主目录(home directory) |
~/Documents/file.txt | 表示当前用户主目录下的 Documents 文件夹中的 file.txt 文件。 |
2.2)Windows系统CMD(命令提示符)
2.2.1)CMD命令:目录和文件导航
java
cd <目录路径>:更改当前目录到指定的目录路径。例如,cd C:\Users\Example\Documents
cd ..:不是 cd..(注意空格):返回上一级目录:这会将当前目录更改为其父目录
cd %HOMEPATH% :可以进入环境变量指定的路径
盘符后跟冒号(例如 C:):切换盘符,然后按下 Enter 键
dir:列出当前目录中的文件和子目录。可以使用dir /s列出所有子目录中的文件和文件夹。
2.2.2)CMD命令目录和文件管理
java
mkdir:创建新目录,例如,mkdir newfolder会在当前目录下创建一个名为newfolder的新文件夹。
rmdir:删除空目录。注意,rmdir只能删除空目录。
rmdir /s /q 目录名:删除非空目录,其中/s表示删除指定目录及其所有子目录和文件,/q表示安静模式。
del:删除一个或多个文件。例如,del filename.txt会删除当前目录下的filename.txt文件。
2.3)Linux系统命令
2.3.1)Linux命令:目录和文件导航
java
cd <目录路径>:更改当前目录到指定的目录路径。例如,cd /home/username/Documents
cd ..:返回上一级目录。
cd ~:进入当前用户的主目录。注意,这与Windows中的cd %HOMEPATH%相似,但~是Linux特有的快捷方式。
cd -:切换到上一次所在的目录。这是Linux特有的一个快速切换功能。
ls:列出当前目录中的文件和子目录。
ls -R可以递归列出所有子目录中的文件和文件夹
ls -l以列表形式显示详细信息,
ls -a显示所有文件(包括以点.开头的隐藏文件)。
pwd:显示当前工作目录的完整路径
2.3.2)Linux命令:目录和文件管理
请注意,rm -rf命令非常危险
,因为它可以删除任何目录及其内容,包括根目录(/),从而导致系统崩溃。
java
mkdir <目录名>:创建新目录。
例如,mkdir newfolder会在当前目录下创建一个名为newfolder的新文件夹。
例如,mkdir -p a/b/c会创建a、b和c目录,即使a和b目录不存在。
rmdir <目录名>:删除空目录。与Windows中的rmdir相同,只能删除空目录。
rm -r <目录名>:删除非空目录及其所有内容。这里的-r选项表示递归删除。
rm <文件名>:删除一个或多个文件。rm filename.txt会删除当前目录下的filename.txt文件。
rm -f <文件名>:强制删除文件,忽略不存在的文件,并且不会有任何提示。
rm -p:删除多级空目录。
cp:复制目录。复制目录时需要使用-r(或-R)选项来递归复制目录及其内容。
例如,cp -r source_dir target_dir会将source_dir目录及其所有子目录和文件
复制到target_dir目录中。如果target_dir不存在,它将被创建。
mv:移动或重命名目录。可以将目录从一个位置移动到另一个位置,或者在同一位置重命名目录。
例如,mv old_dir new_dir会将old_dir目录重命名为new_dir,
如果new_dir是一个存在的目录,则old_dir及其内容会被移动到new_dir下。
第三章、Java中SpringBoot相关路径
3.1)resources特殊资源目录
在Java开发中,resources文件夹是一个至关重要的部分。它主要用于存放Java工程中的各种非源代码资源文件,这些资源文件可以是配置文件(如properties或XML文件)、图片、音频、模板文件等。Resource文件夹的作用主要体现在以下几个方面:
简化资源加载:Java提供了多种方式加载Resource目录中的文件,简化了资源加载的过程。开发者可以通过类路径(classpath)
轻松访问这些资源。
跨平台兼容性:当Java项目被打包成JAR或WAR文件时,Resource目录中的文件会被自动包含在内,从而确保了跨平台兼容性。
在典型的Java项目结构中,Resource文件夹通常位于
java
src/main/resources(用于主应用程序的资源文件)
src/test/resources(用于测试相关的资源文件)下。
子目录:
java
src/main/resources/static:用于存放静态资源文件
(如HTML、CSS、JavaScript、图片等)。
这些资源文件可以直接通过Web访问,访问路径为"/文件名"。
src/main/resources/public:用于存放静态资源文件,优先级略低于static目录。
src/main/resources/templates:用于存放模板文件,
如使用Thymeleaf、FreeMarker等模板引擎时所需的HTML模板文件。
这些模板文件通常用于渲染Web页面。
classpath:/META-INF/resources:用于加载JAR包中的资源文件。如果
资源文件被打包在JAR包的META-INF/resources目录下,那么这些资源文件也可以通过Web访问
3.2)类路径classpath
3.2.1)什么是类路径
类路径(Classpath)是Java应用程序查找类文件(.class)和其他资源文件(如属性文件、XML配置文件等)的一组目录、JAR文件(Java ARchive)和ZIP文件的集合。它是Java虚拟机(JVM)和Java编译器在运行时和编译时用于定位类和其他资源的路径。
在Java中,类路径的作用类似于操作系统的PATH环境变量
,但它是专门用于Java应用程序的。当Java应用程序运行时,JVM会沿着类路径查找并加载所需的类。如果JVM在类路径中找不到某个类,它将抛出ClassNotFoundException异常。
java
src/main/java:存放Java源代码文件的目录。这些源代码文件在编译后会
生成.class文件,并放置在构建输出目录(如Maven的target/classes)中,
这些.class文件随后会被包含在classpath中。
src/main/resources:存放资源文件的目录,如配置文件(applicati
on.properties)、静态资源(如图片、CSS、JavaScript文件等,
这些资源文件在构建过程中会被复制到构建输出目录,并包含在classpath中。
依赖的JAR包:项目所依赖的第三方库(JAR包)也会被包含在classpath中。
这些JAR包通常通过Maven或Gradle等构建工具管理,并在构建过程中被
添加到项目的构建路径中。特殊资源目录
3.2.2)yml文件中配置resources下的文件路径
使用类路径(classpath:
前缀)来引用这些文件
java
# application.yml
resources:
configFilePath: classpath:config/application.properties
staticFilesDir: classpath:static/
3.3)Resource接口
3.3.1)Resource接口常用方法
方法 | 签名 | 描述 |
---|---|---|
getInputStream() | InputStream getInputStream() throws IOException | 找到并打开资源,返回一个InputStream以从资源中读取数据。每次调用通常都会返回一个新的InputStream实例 |
exists() | boolean exists() | 判断资源是否以物理形式存在。返回一个布尔值,如果资源存在则返回true,否则返回false。 |
isFile() | boolean isFile() | 判断这个资源是否代表了一个文件系统的文件。如果资源是一个文件系统文件,则返回true,否则返回false。 |
getURL() | URL getURL() throws IOException | 返回一个资源的URL句柄。如果资源不能被解析为URL,则抛出IOException。 |
getFile() | File getFile() throws IOException | 返回资源对应的File对象。如果资源不能被解析为绝对路径的文件,则抛出FileNotFoundException。 |
getFilename() | String getFilename() | 返回资源的文件名。这通常是资源的最后一部分路径名。 |
管 | 阿 |
不同的Resource实现类可能会对这些方法有不同的实现方式。例如,ClassPathResource会从类路径中加载资源,而FileSystemResource会从文件系统中加载资源。因此,在使用这些方法时,需要了解所使用Resource实现类的具体行为。
3.3.2)Resource接口使用示例
ClassPathResource
从类路径中加载资源,
resource.getFile()
获取File对象,
InputStream inputStream = resource.getInputStream()
// 使用inputStream读取文件内容
java
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.io.File;
import java.io.IOException;
public class ResourceLoaderExample {
public static void main(String[] args) {
Resource resource = new ClassPathResource("tamp/content.excel");
try {
File file = resource.getFile();
// 使用inputStream读取文件内容...
InputStream inputStream = resource.getInputStream();
System.out.println("文件存在: " + file.getAbsolutePath());
} catch (IOException e) {
System.err.println("无法获取文件路径: " + e.getMessage());
}
}
}
3.3.3)加载文件资源
在Java代码中,使用Resource或ResourceLoader来加载下面这些资源。
java
# application.yml
resources:
configFilePath: classpath:config/application.properties
staticFilesDir: classpath:static/
代码:
java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
@Configuration
public class ResourceConfig {
//@Value注解获取配置文件中的值
@Value("${resources.configFilePath}")
private String configFilePath;
//@Value注解获取配置文件中的值
@Value("${resources.staticFilesDir}")
private String staticFilesDir;
private final ResourceLoader resourceLoader;
public ResourceConfig(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
/示例 1
@Bean
public Resource configResource() {
//此时configFilePath已经被@value注解注入了文件路径
//也就是列出classpath:config/application.properties文件
Resource resource = resourceLoader.getResource(configFilePath);
return resource;
}
/示例 2
@Bean
public Resource[] staticResources() {
//此时staticFilesDir已经被@value注解注入了文件路径,
//也就是列出classpath:static/example.txt
return new Resource[]{
resourceLoader.getResource(staticFilesDir + "example.txt")};
}
}