尽管java.io包中定义的大多数类是对数据实施流式操作的,但File类例外,它用于处理文件和文件系统。也就是说File类没有指定数据怎样从文件读取或向文件存储,它仅仅描述了文件本身的属性。
在java.io包之中,File类是唯一一个与文件本身有关的操作类。它定义了一些与平台无关的方法来操作文件,通过调用File类提供的各种方法,能够完成创建
删除文件,重命名文件,判断文件的读写权限及文件是否存在,设置和查询文件创建时间、权限等操作。File类除了对文件操作外,还可以将目录当做文件进行处理------Java中的目录当成File对象对待。
如果要想使用File类进行操作,那么就必须设置一个要操作文件的路径。下面的3个构造方法可以用来生成File对象。
- File(String directoryPath)//创建指定文件或目录路径的File对象
- File(String directoryPath,String filename)//创建由File对象和指定文件名的File对象
- File(File dirObj,String filename)//创建指定文件目录路径和文件名的File对象
Java能正确处理UNIX和Windows/DOS约定路径分隔符。如果在Windows版本的Java下用斜线(/),路径处理依然正确。请注意:如果在Windows/DOS下使用反斜线(\)来作为路径分隔符,那么就需要在字符串内使用它的转义序列(即两个反斜线“\\”)。Java约定是用UNIX和URL风格的斜线“/”来作路径分隔符。
下面的例子演示了File类的几个方法的使用。
import java.io.File;
import java.io.IOException;
/**
* Created by 1 on 2018/8/20.
*/
public class FileDemo {
public static void main(String[] arg){
File file = new File("c:\\1.txt");
if (file.exists())
file.delete();
else
try {
file.createNewFile();
} catch (IOException e) {
System.out.println(e.getMessage());
}
//getName()方法获得文件名
System.out.println("文件名:" + file.getName());
//getPath()方法获得文件路径
System.out.println("文件路径:" + file.getPath());
//getAbsolutePath()方法获得绝对路径
System.out.println("绝对路径:" + file.getAbsolutePath());
//getParent()方法获得父文件夹名
System.out.println("父文件夹名称:" + file.getParent());
//exists()判断文件是否存在
System.out.println(file.exists() ? "文件存在" : "文件不存在");
//canRead()判断文件是否可读
System.out.println(file.canRead() ? "文件可读" : "文件不可读");
//canWrite()判断文件是否可写
System.out.println(file.canWrite() ? "文件可写" : "文件不可写");
//isDirectory()判断是否是目录
System.out.println(file.isDirectory() ? "是目录" : "不是目录");
//isFile()判断是否是文件
System.out.println(file.isFile() ? "是文件" : "不是文件");
//isAbsolute()判断是否是绝对路径
System.out.println(file.isAbsolute() ? "是绝对路径" : "不是绝对路径");
//lastModified()文件最后修改时间
System.out.println("文件最后修改时间:" + file.lastModified());
//length()文件大小
System.out.println("文件大小:" + file.length() + "Bytes");
}
}
File类只能对文件进行一些简单操作,如读取文件的属性及创建、删除和更名等,但并不支持文件内容的读、写。如果想对文件进行实施读写操作,就必须通过输入、输出流来达到这一目的。
以上程序运行同时会出现以下问题:
- 在操作的时候出现了延迟,因为文件的管理肯定还是由操作系统完成的,那么程序通过JVM(Java Virtual Machine)与操作系统进行操作,多了一层操作,所以势必会产生一定的延迟。
- 在Windows之中路径的分隔符使用“\”,而在Linux中分隔符使用“/”,而现在Java程序如果要想让其具备可移植性,就必须考虑分隔符的问题所以为了解决这样的困难,在File类中提供了一个常量:public static final String separator.在日后的开发之中,只要遇见路径分隔符的问题,都可用separator常量来解决。
以上程序是直接在d盘的根路径下创建的新文件,如果说现在有目录的时候就发现无法直接创建文件了,因为文件目录不存在,要想创建文件之前首先创建目录。
创建一级目录:public boolean mkdir();
创建多级目录:public boolean mkdirs();
而如果要想创建目录应该是根据给定路径的父路径才可以创建,所以要想取得父路径可以使用:public File getParentFile();
import java.io.File;
import java.io.IOException;
/**
* Created by 1 on 2018/8/20.
*/
public class Test {
public static void main(String[] args) throws IOException {
File file = new File("d:" + File.separator +
"mytest" + File.separator +
"demo" + File.separator +
"mldn.txt");//要定义的操作文件路径
if (!file.getParentFile().exists()){//父路径不存在
file.getParentFile().mkdirs();//创建目录
}
System.out.println(file.createNewFile());
}
}