# 管理源文件和类文件

> 原文： [https://docs.oracle.com/javase/tutorial/java/package/managingfiles.html](https://docs.oracle.com/javase/tutorial/java/package/managingfiles.html)

Java 平台的许多实现依赖于分层文件系统来管理源文件和类文件，尽管 _Java 语言规范 _ 不要求这样做。策略如下。

将类，接口，枚举或注释类型的源代码放在文本文件中，该文件的名称是类型的简单名称，其扩展名为`.java`。例如：

```
//in the Rectangle.java file 
package graphics;
public class Rectangle {
   ... 
}

```

然后，将源文件放在一个目录中，该目录的名称反映了该类型所属的包的名称：

```
.....\graphics\Rectangle.java

```

假定 Microsoft Windows 文件名分隔符反斜杠（对于 UNIX，使用正斜杠），包成员的限定名称和文件的路径名是并行的。

*   **类名称** - `graphics.Rectangle`
*   **文件的路径名** - `graphics\Rectangle.java`

您应该记得，按照惯例，公司使用其反向的互联网域名作为其包名。示例公司的 Internet 域名为`example.com`，它的所有包名都在`com.example`之前。包名称的每个组件对应一个子目录。因此，如果 Example 公司有一个包含`Rectangle.java`源文件的`com.example.graphics`包，它将包含在一系列子目录中，如下所示：

```
....\com\example\graphics\Rectangle.java

```

编译源文件时，编译器会为其中定义的每种类型创建不同的输出文件。输出文件的基本名称是类型的名称，其扩展名为`.class`。例如，如果源文件是这样的

```
//in the Rectangle.java file
package com.example.graphics;
public class Rectangle {
      . . . 
}

class Helper{
      . . . 
}

```

然后编译的文件将位于：

```
<path to the parent directory of the output files>\com\example\graphics\Rectangle.class
<path to the parent directory of the output files>\com\example\graphics\Helper.class

```

与`.java`源文件一样，已编译的`.class`文件应位于一系列反映包名称的目录中。但是，`.class`文件的路径不必与`.java`源文件的路径相同。您可以单独排列源和类目录，如下所示：

```
<path_one>\sources\com\example\graphics\Rectangle.java

<path_two>\classes\com\example\graphics\Rectangle.class

```

通过这样做，您可以将`classes`目录提供给其他程序员而不会泄露您的来源。您还需要以这种方式管理源文件和类文件，以便编译器和 Java 虚拟机（JVM）可以找到程序使用的所有类型。

`classes`目录的完整路径`&lt;path_two&gt;\classes`称为 _ 类路径 _，并使用`CLASSPATH`系统变量设置。编译器和 JVM 都通过将包名添加到类路径来构造`.class`文件的路径。例如，如果

```
<path_two>\classes

```

是您的类路径，包名是

```
com.example.graphics,

```

然后编译器和 JVM 查找`.class files`

```
<path_two>\classes\com\example\graphics.

```

类路径可能包含多个路径，由分号（Windows）或冒号（UNIX）分隔。默认情况下，编译器和 JVM 搜索当前目录和包含 Java 平台类的 JAR 文件，以便这些目录自动位于类路径中。

## 设置 CLASSPATH 系统变量

要显示当前`CLASSPATH`变量，请在 Windows 和 UNIX（Bourne shell）中使用以下命令：

```
In Windows:   C:\> set CLASSPATH
In UNIX:      % echo $CLASSPATH

```

要删除`CLASSPATH`变量的当前内容，请使用以下命令：

```
In Windows:   C:\> set CLASSPATH=
In UNIX:      % unset CLASSPATH; export CLASSPATH

```

要设置`CLASSPATH`变量，请使用以下命令（例如）：

```
In Windows:   C:\> set CLASSPATH=C:\users\george\java\classes
In UNIX:      % CLASSPATH=/home/george/java/classes; export CLASSPATH

```