File类
- File类可以表示一个文件(如.txt,.exe文件等文件),还可以表示一个目录(文件夹),所以我们可以在程序中用File 类的对象可以表示一个文件或者目录
- File 类的对象 还不能直接对文件进行读写操作,只能修改文件的属性
常用方法
方法 | 描述 |
---|---|
boolean exists() | 判断文件是否存在 |
boolean isDirectory() | 判断类型是否是文件夹 |
boolean isFile() | 判断类型是否是文件 |
long length() | 计算文件所包含的字节数 |
boolean createNewFile() | 创建文件 |
boolean delete() | 删除文件 |
boolean mkdir() | 创建单个文件夹 |
boolean mkdirs() | 创建目录路径的所有文件夹 |
创建文件
public class FileCreate {
public static boolean fileCreate(String path){
if(!checkPath(path))
{
System.out.println("路径不合法!");
return false;
}
File file = new File(path);
if(file.exists())
{
System.out.println("文件已存在!");
return false;
}
int index = path.lastIndexOf("/");
if(index < 0)
{
index = path.lastIndexOf("\\");
}
String path1 = path.substring(0,index);
String path2 = path.substring(index + 1);
File dir = new File(path1);
if(!dir.exists())
{
if(!dir.mkdirs())
{
System.out.println("创建文件夹失败");
return false;
}
}
File f = new File(dir, path2);
if(!f.exists())
{
if(f.isFile())
{
try {
return f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
return f.mkdirs();
}
}
return true;
}
public static boolean checkPath(String path)
{
String [] strings = {"\\","/",":","*","<",">","?","|","\""};
if(path == null || "".equals(path))
{
return false;
}
String[] str = path.split("\\\\");
if(str.length == 1)
{
str = path.split("/");
}
if(!Character.isLetterOrDigit(str[0].charAt(0)) || !(str[0].charAt(1) == ':') || str[0].length() != 2){
return false;
}
for(int i = 1; i < str.length; i++)
{
for(String s1 : strings)
{
if(str[i].contains(s1))
{
return false;
}
}
}
return true;
}
}
文件创建步骤:
1. 判断路径是否合法
本文中创建文件使用的是绝对路径。在boolean checkPath()中,将路径分割取出每一级的目录,因为是绝对路径,所以根目录是 C: 的形式,之后是判断了每级目录中是否包含了文件对象所不允许的特殊字符。
2. 创建父目录
本文将整个目录摘除掉最后一级目录后的路径作为父目录,父目录的每级目录都可以确定是一个文件夹,直接以创建文件夹的方式进行创建。
3. 创建子文件
本文将整个目录的最后一级目录称为子文件,子文件可以是文件夹,也可以是文件(如.txt,.exe文件等文件),通过判断文件类型选择相应的方式进行创建。
删除文件
public class FileDelete {
public static boolean fileDelete(File file) {
if (file == null || !file.exists())
{
return false;
}
if (file.isFile())
{
return file.delete();
}
else
{
File[] fileList = file.listFiles();
if (fileList != null)
{
for (File f : fileList)
{
fileDelete(f);
}
}
}
return file.delete();
}
}
进行删除操作时需要注意:如果文件对象的类型是文件(如.txt,.exe文件等文件),可以直接进行删除;如果是目录(即文件夹),则需要将文件夹内的所有文件对象都进行删除后,才可以将本文件夹删除。boolean fileDelete()中就是用了递归将文件对象一层层的删除掉。
统计文件大小
public class FileGetSize {
public static long fileGetSize(File file){
if (file == null || !file.exists())
{
return 0;
}
long size = 0;
if(file.isFile())
{
return file.length();
}
else
{
File[] fileList = file.listFiles();
if(fileList != null)
{
for(File f:fileList)
{
size = size + fileGetSize(f);
}
}
}
return size;
}
}
统计文件对象所包含的字节数,对于类型是文件夹的文件对象来说,没有直接统计的方法,类型是文件的文件对象可以使用file.length()直接获取文件所包含的字节数。所以使用递归的方式,一层层进行统计。