【JavaSE】day07_File
1.File
1) java.io.File
* 该类用于描述文件系统中的一个文件或目录。
* File可以访问文件或目录的属性信息。 File可以操作文件或目录。 File可以查看一个目录有哪些子项。
* File不能访问文件内容!
2)String getName()
---获取文件名
3)long length()
---获取文件大小(文件占用的字节量)
4)boolean exists()
---判断当前File表示的文件或目录是否在硬盘中已经存在。
5)boolean lastModified()
---获取最后的修改时间 1970年元旦到这一刻的毫秒差。还不存在的文件的最后修改时间为0。
具体细节见代码:
package day01;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* java.io.File
* 该类用于描述文件系统中的一个文件或目录。
* File可以访问文件或目录的属性信息。
* File可以操作文件或目录。
* File可以查看一个目录有哪些子项。
*
* File不能访问文件内容!
*/
public class FileDemo1 {
public static void main(String[] args) {
/*
* 描述目录时应当注意两点:
* 1:尽量不用绝对路径,因为不同操作系统有差异。
* 2:目录的层级分割符不要直接写“/”或“\”,,因为
* 不同系统也有差异,所以使用File的常量:
* File.separator就可以了。
*/
// "/home/soft01/myworkspace/Mycode003_SE02/demo.txt"
File file = new File("."+File.separator+"demo.txt");//.表示当前目录,项目所在目录
/*
* 获取文件名
*/
String name = file.getName();
System.out.println("文件名:"+name);
/*
* 获取文件大小(文件占用的字节量)
*/
long length = file.length();
System.out.println("文件大小:"+length);
/*
* 判断当前File表示的文件或目录是否在硬盘中已经存在。
*/
boolean exits = file.exists();
System.out.println("已存在:"+exits);
/*
* 获取最后的修改时间 1970年元旦到这一刻的毫秒差。
* 还不存在的文件的最后修改时间为0。
*/
long dateTime = file.lastModified();
System.out.println(dateTime);
Date date = new Date(dateTime);
System.out.println(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日 HH:mm:ss");
String dateStr = sdf.format(date);
System.out.println(dateStr);
//是否是隐藏文件
boolean isHidden = file.isHidden();
//是否可读
boolean canRead = file.canRead();
//是否可写
boolean canWrite = file.canWrite();
//是否可运行
boolean canExecute = file.canExecute();
//是否是文件
boolean isFile = file.isFile();
//是否是目录
boolean isDir = file.isDirectory();
System.out.println(isHidden+","+canRead+","+canWrite+","+canExecute+","+isFile+","+isDir);
}
}
6)boolean createNewFile()
---创建新文件
代码:
package day01;
import java.io.File;
import java.io.IOException;
/**
* 使用File创建一个新文件
*/
public class FileDemo2 {
public static void main(String[] args) throws IOException {
/*
* 在当前目录根目录下创建文件:test.txt
* 若直接书写文件名,默认就在当前目录下,所以“./"是可以忽略不写的。
*/
File file = new File("test.txt");
if(!file.exists()){
//创建当前文件(如果文件已存在,则不再创建)
file.createNewFile();
System.out.println("文件创建成功");
}
//file.createNewFile();
//System.out.println("111");
}
}
7)boolean delete()
---删除一个现有的文件
代码:
package day01;
import java.io.File;
/**
* 删除一个现有的文件
*/
public class FileDemo3 {
public static void main(String[] args) {
/*
* 删除当前目录中的test.txt文件
*/
File file = new File("test.txt");
if(file.exists()){
boolean b1 = file.delete();
System.out.println(b1+"删除完毕");
}
}
}
8)boolean mkdir()
---创建一个目录
代码:
package day01;
import java.io.File;
import java.io.IOException;
/**
* 创建一个目录
*/
public class FileDemo4 {
public static void main(String[] args) throws IOException {
/*
* 在当前目录下创建目录demo
*/
File dir = new File("demo");
if(!dir.exists()){
dir.mkdir();
System.out.println("创建目录成功!");
}
File file1 = new File(".");
System.out.println(file1.length());
//删除目录
//dir.delete();
}
}
9) boolean mkdirs()
---创建一个多级目录
package day01;
import java.io.File;
/**
* 创建一个多级目录
*
*/
public class FileDemo5 {
public static void main(String[] args) {
/*
* 在当前项目根目录下创建目录:
* a/b/c
*/
File dirs = new File("a/b/c/d/e/f");
if(!dirs.exists()){
dirs.mkdirs();
System.out.println("创建完毕!");
}
//dirs.delete();
}
}
10)递归删除多级目录
代码:
package day01;
import java.io.File;
/**
* 删除多级目录
* 当删除一个含有子项的目录时,直接使用delete方法是删除不成功的,
* 需要先将该目录中的所有子项删除以后,该目录才可以成功删除。
*
*/
public class FileDemo6 {
public static void main(String[] args) {
/*
* 删除当前目录中的a目录
*/
File dir = new File("a");
deleteFile(dir);
}
public static void deleteFile1(File file){
if(!file.exists()){
return ;
}
if(file.isFile()){
file.delete();
return ;
}
File[] subs = file.listFiles();
for(File f : subs){
deleteFile(f);
}
file.delete();
//return ;
}
public static void deleteFile(File file){
if(file.isDirectory()){
File[] sub = file.listFiles();
for(File f : sub){
deleteFile(f);
}
}
file.delete();
}
}
11)File[] listFiles()
---该方法获取当前目录下的所有子项,由于一个目录下包含的无非还是文件或者目录,那么都可以用一个File对象表示。所以获取一个目录里面所有子项就等于获取了若干File对象,每一个表示其中一个子项。
代码:
package day01;
import java.io.File;
/**
* 获取一个目录下的所有子项
*
*/
public class FileDemo7 {
public static void main(String[] args) {
/*
* 获取当前项目根目录下的所有子项
*/
File file = new File(".");
/*
* File[] listFiles()
* 该方法获取当前目录下的所有子项,由于一个目录下
* 包含的无非还是文件或者目录,那么都可以用一个File
* 对象表示。所以获取一个目录里面所有子项就等于获取
* 了若干File对象,每一个表示其中一个子项。
*/
File[] files = file.listFiles();
for(File f : files){
if(f.isDirectory()){
//判断当前File表示的是否为一个文件
System.out.print("目录:");
}else if(f.isFile()){
//判断当前File表示的是否为一个目录
System.out.print("文件:");
}
System.out.println(f.getName());
}
}
}
12)FileFilter文件过滤器
代码:
package day01;
import java.io.File;
import java.io.FileFilter;
/**
* FileFilter文件过滤器
*
* File有一个重载的listFiles方法,允许我们传入一个
* 文件过滤器,并将满足过滤器要求的子项返回。不满足则忽略。
*
*/
public class FileDemo8 {
public static void main(String[] args) {
/*
* 获取当前目录下名字以“.”开头的文件或目录。
*/
FileFilter filter = new FileFilter(){
/**
* 过滤器过滤条件:
* 当给定的file对象满足要求,返回true即可。
*/
public boolean accept(File file) {
return file.getName().startsWith(".");
}
};
File file = new File(".");
/*
* 获取满足给定过滤器要求的所有子项。
*/
File[] sub = file.listFiles(filter);
for(File f : sub){
System.out.println(f.getName());
}
}
}