“嗨,阿米戈。好久不见。”
“嗨,Bilaabo。你要谈什么?”
“今天我要给大家讲讲文件操作。Java 有一个特殊的类(File),可以用来管理硬盘上的文件。对于管理文件内容,还有其他类:FileInputStream、FileOutputStream 等。 “

“有趣。但是当你说‘管理文件’时,你是什么意思?”
“这正是我现在要解释的。文件可以创建、删除、重命名等等。您可以将 File 对象传递给几乎每个处理(读取、写入、更改)文件内容的类。 例如:”
FileInputStream input = new FileInputStream("c:/path/a.txt");
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);
“但是第二个选项更长。我还是不明白为什么我们需要这些文件对象。”
“对于这个具体的例子,你是对的。”这不是你必须如何做的例子,而是你可以如何做的例子。
但是想象一下,您需要显示位于特定目录中的所有文件的列表。以下是如何使用 File 对象完成此操作:"
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
System.out.println(file.getName());
}
“ listFiles()是一种返回由 «c:/path/» 指示的文件夹中的文件列表的方法吗?”
“是啊,不过程序员一般都说‘目录’,‘文件夹’这个词是最近才用的,不过原则上这两个词都是对的,你说哪个都行。”
“好的。那么getName ()是做什么的呢?返回文件名?文件名中到底包含什么?是包含路径的全名,还是文件本身的名称?”
“只有文件本身的名称。对于完整路径,有 file.getAbsolutePath()。”
“那么 File 类还有哪些其他方法?”
“看看这个:”
方法 | 描述 |
---|---|
boolean isDirectory() |
File 对象是一个目录吗? |
boolean isFile() |
对象是文件吗? |
long length() |
以字节为单位返回文件大小/长度。 |
boolean createNewFile() |
如果具有此名称的文件尚不存在,则创建一个新的空文件。 |
boolean mkdir() |
创建一个目录。名称 «mkdir» 来自 «make directory»。 |
boolean mkdirs() |
创建目录及其所有子目录。 |
boolean delete() |
删除与对象关联的文件。如果对象是目录,则仅当目录中没有文件时才删除该目录。 |
void deleteOnExit() |
将文件添加到一个特殊的文件列表中,该列表将在程序退出时自动删除。 |
File createTempFile( String prefix, String suffix, File directory) |
使用随机生成的唯一名称创建一个临时文件,类似于 «dasd4d53sd»。 附加参数是名称前缀和后缀。如果未指定目录,则会在临时文件的特殊操作系统目录中创建该文件。 |
boolean exists() |
如果硬盘驱动器上存在同名文件,则返回真。 |
String getAbsolutePath() |
返回文件及其所有子目录的完整路径。 |
String getCanonicalPath() |
返回规范文件路径。 例如,将路径 «c:/dir/dir2/../a.txt» 转换为 «c:/dir/a.txt» |
String[] list() |
返回当前对象表示的目录中包含的文件名数组。 |
File[] listFiles() |
返回包含在当前 File 对象表示的目录中的文件数组。 |
long getTotalSpace() |
返回文件所在磁盘上的总空间量(字节数)。 |
long getFreeSpace() |
返回文件所在磁盘上的可用空间量(字节数)。 |
boolean renameTo(File) |
重命名文件,即文件的内容实际上得到一个新名称。换句话说,您可以将文件 «c:/dir/a.txt» 重命名为 «d:/out/text/b.doc»。 |
String getName() |
只返回没有路径的文件名。 |
String getParent() |
仅返回当前文件的路径(目录),不返回名称本身。 |
Path toPath() |
返回对应于当前 File 对象的 Path 对象。 |
“哇!不是一个非常小的列表,是吧?而且你似乎可以用它做很多事情:创建和删除文件,重命名它们,......”
“所以要获取当前文件的目录,我需要调用getParent()?”
“是的,但它返回一个字符串——文件路径——而不是一个 File 对象。实际上,File 类几乎复制了它的所有方法:一个版本返回一个字符串,另一个——一个 File 对象。检查一下:”
File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();
如果您有一个带有文件路径的 String 并且您需要一个File对象,则使用构造函数。如果情况相反(你有一个File对象但你需要一个 String),那么使用getAbsolutePath ()。例如:”
String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();
“知道了。”
“太好了。那么给你一个小任务:显示与当前文件位于同一目录下的所有文件的名称。”
“没有比这更容易的了。看,看:”
//Some file
File originalFile = new File("c:/path/dir2/a.txt");
//An object representing the directory
File folder = originalFile.getParentFile();
//Print the file list on screen
for (File file : folder.listFiles())
{
System.out.println(file.getName());
}
“嗯。没错。”
“但有点令人困惑的是,同一个类——文件——同时用于文件和目录。这对我来说似乎不太合逻辑。”
“由于历史原因,它是这样解决的。目录曾经是磁盘上一个特殊的‘空’文件。当然,现在发生了很多变化,但不是全部。这就是我今天所拥有的。”
“感谢有趣的课程,Bilaabo。”
GO TO FULL VERSION