起源

每次新建项目时,都很好奇为什么Java文件需要放到项目下的 src/main/java 下?

Interllij IDEA 仿佛自带“魔力”,在项目下新建目录时,会自动提示还未存在的目录结构(Maven Source Directories),并提供一键新建目录功能。

image-20231007111209185

解释

Maven项目目录结构的解释

关于Maven项目的Maven Source Directories的解释:

  • src:翻译为source,表示源代码目录的根目录。
  • main:表示主要的代码目录,用于存放项目的主要功能代码。
  • java:表示Java代码的目录,用于存放Java类和包。
  • src/test/java:提供一个专门的位置用于编写和管理项目的单元测试、集成测试或其他类型的测试代码。
  • src/test/resources:提供一个专门的位置,用于存放测试过程中所需的资源文件。

总结:这种目录结构其实是一种约定,src/main/java是一种常见的源代码目录结构约定,它遵循了Maven项目的标准布局。而idea内置功能在识别到项目为maven项目时,做新建目录操作时就会按照约定提供一键新建目录功能。

需要注意的是,src/main/java只是一种约定,并非强制规定。在某些特定情况下,可以根据项目需求进行自定义的目录结构,但建议遵循这种约定以保持代码的一致性和可读性。

常见的源代码目录结构约定

  1. src/main/kotlin:用于Kotlin项目的源代码目录。与Java项目的约定类似,Kotlin项目通常将源代码放在src/main/kotlin目录下。
  2. src/main/scala:用于Scala项目的源代码目录。Scala是一种运行在Java虚拟机上的编程语言,它也有类似于Java和Kotlin的目录结构约定。
  3. src/main/python:用于Python项目的源代码目录。Python项目通常将源代码放在src/main/python目录下,以区分其他类型的文件,例如配置文件或测试代码。
  4. src/main/resources:用于存放项目的资源文件,如配置文件、静态文件、模板等。这个目录通常与源代码目录(如src/main/java)平行存在。
  5. src/test/java:用于存放测试代码的目录。测试代码通常位于src/test/java目录下,它与主要代码目录(如src/main/java)有类似的结构。
  6. src/test/resources:用于存放测试所需的资源文件,例如测试数据、配置文件等。与测试代码目录(如src/test/java)平行存在。

实测

src/main/java中的Java代码如何获取到src/main/resources下的文件信息

目前项目的目录结构如下,有一个Java类(ProjectStructure)、一个resource资源文件(jdbc.properties)。

image-20231007112957213

jdbc.properties 文件信息如下:

image-20231007113114109

现在想从ProjectStructure类中获取 jdbc.properties 文件的 jdbc.driver 属性值,Java代码如下:

1
2
3
4
5
6
7
public static void main(String[] args) throws IOException {
Properties props = new Properties();
// 注意路径的写法
props.load(ProjectStructure.class.getClassLoader().getResourceAsStream("jdbc.properties"));
String driver = props.getProperty("jdbc.driver");
System.out.println(driver);
}

输出结果为:

image-20231007113754889

结论:

  1. IDEA 中的所有文件(包括 Java 程序文件和资源文件)都是从“项目根目录”开始查找的。
  2. Java 程序文件除了从“项目根目录”查找,还会从“类路径”查找。

Java获取资源文件信息的方法:Java如何获取资源文件的输入流