18. Java IO: File
想要查看此教程的目录请点击:Java IO教程目录贴地址
Java IO 的File类可以帮助你访问底层的文件系统,使用File类你可以:
- 查看文件或目录是否存在
- 如果目录不存在,可以创建
- 读取文件的长度
- 删除或移动文件
- 删除文件
- 查看路径指向的事文件还是目录
- 读取目录下的文件列表
这篇文章会告诉你更多的相关操作。
注意:File只允许你访问文件和文件系统的元数据,如果你需要读写文件的内容,那么你可以使用FileInputStream,FileOutputStream和RandomAccessFile等。
注意:如果你使用的是Java NIO,你就得使用java.nio.FileChannel。(你可以两种方法都使用,但是你只是想用Java NIO)
实例化java.io.File
在你使用File类对文件系统做一些操作之前,你必须要创建一个File实例。下面是如何创建一个实例:
File file = new File("c:\\data\\input-file.txt");
很简单对么?File类也有一些其他的构造方法供你使用。
查看文件是否存在
一旦实例化了File,你就可以检查相应的文件是否存在。如果文件不存在File类的构造方法也不会执行失败。要检查文件是否存在,调用exists()方法,下面是一个例子:
File file = new File("c:\\data\\input-file.txt");
boolean fileExists = file.exists();
如果目录不存在,那么创建一个
你可以用File类创建一个目录,如果该目录不存在。相关的方法为mkdir()和mkdirs()。
利用mkdir()创建一个文件夹,如果该文件夹不存在:
File file = new File("c:\\users\\jakobjenkov\\newdir");
boolean dirCreated = file.mkdir();
假如c:\users\jakobjenkov目录已经存在,上面的代码会创建一个jakobjenkov的子目录newdir。如果目录已经创建好,mkdir()会返回true,如果没有则返回false。
mkdirs()会创建所有所有参数中不存在的路径:
File file = new File("c:\\users\\jakobjenkov\\newdir");
boolean dirCreated = file.mkdirs();
假如C盘已经存在,例子中的代码会创建所有的相关文件夹,如果创建好则返回true,反之则为not。
文件长度
以字节读取文件的长度,调用length()方法,下面是一个例子:
File file = new File("c:\\data\\input-file.txt");
long length = file.length();
重命名或移动文件
重命名或移动一个文件,调用renameTo()方法:
File file = new File("c:\\data\\input-file.txt");
boolean success = file.renameTo(new File("c:\\data\\new-file.txt"));
正如前面所简要提到的,renameTo()方法也可以用来移动文件到另一个目录。给renameTo()方法传递的新目录名称不要与文件所在的目录一样。
renameTo()方法返回布尔类型的值,表示重命名是否成功。导致重命名或移动文件失败有很多原因,比如文件已经被其他程序打开,没有足够的权限等等。
删除文件
删除文件需要调用delete() 方法:
File file = new File("c:\\data\\input-file.txt");
boolean success = file.delete();
此方法也会返回一个布尔值表示文件是否删除成功。删除文件失败的原因可能有文件已经被其他程序打开,没有足够的权限等等。
确定指向的路径是文件还是目录
File实例可以指向文件或目录。你可以检查指向的具体是什么,这里调用isDirectory()方法。如果方法返回true那么说明指向的是目录,反之则为文件:
File file = new File("c:\\data");
boolean isDirectory = file.isDirectory();
读取目录下的文件列表
你可以通过调用list()方法或listFiles() 方法获得一个目录下的文件列表,list()方法返回一个String数组,代表指向的文件或目录的绝对路径。listFiles() 方法返回一个File数组,代表着相应文件的File对象:
File file = new File("c:\\data");
String[] fileNames = file.list();
File[] files = file.listFiles();