一、java IO流之File
说明:本文章只是一些基础练习,供入门者参考。
1.创建一个文件(或目录),判断它是否已存在,若不存在则创建,判断它是一个文件还是一个目录,删除它,判断它是否还存在。
1.1文件
@Test
public void testFile() {
File file = new File("D:","hello.txt");
//判断文件是否已存在,不存在就创建
if(file.exists()) {
System.out.println("hello.txt已存在!");
} else {
try {
boolean isCreate = file.createNewFile();
if(isCreate) {
System.out.println("hello.txt创建成功");
} else {
System.out.println("创建文件失败!!");
}
} catch (IOException e) {
System.out.println("创建文件发生异常!");
}
}
//判断它是一个文件还是一个目录
if (file.isDirectory()) {
System.out.println("这是一个目录");
}
if (file.isFile()) {
System.out.println("这是一个文件");
}
//删除它
boolean isDel = file.delete();
if(isDel) {
System.out.println("文件删除成功");
} else {
System.out.println("文件删除失败");
}
//判断文件是否还存在
if (file.exists()) {
System.out.println("文件还在");
} else {
System.out.println("文件不在了!");
}
}
//运行结果:
/*hello.txt创建成功
这是一个文件
文件删除成功
文件不在了!*/
1.2目录
@Test
public void testDir() {
//File.separator会根据平台自动处理文件分隔符.
File file = new File("D:"+File.separator + "aa" + File.separator + "bb","temp");
//判断file对象是否已存在,若不存在则创建
if (file.exists()) {
System.out.println("temp已存在");
} else {
//创建
//如果其父目录不存在,则用file.mkdirs(),该方法会创建父级目录
boolean isCreate = file.mkdirs();
//如果父目录已存在,则可用file.mkdir(),只会创建当前这一个目录
//boolean isCreate = file.mkdir();
if (isCreate) {
System.out.println("temp创建成功");
} else {
System.out.println("temp创建失败");
}
}
//判断它是一个文件还是一个目录
if (file.isDirectory()) {
System.out.println("这是一个目录");
} else {
System.out.println("这是一个文件");
}
//删除它,此时前面为其创建的父目录不会被删除.
boolean isDel = file.delete();
if (isDel) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
//判断它是否还在
if (file.exists()) {
System.out.println("这个东东还在");
} else {
System.out.println("这个东东不在了");
}
}
//运行结果:
/*temp创建成功
这是一个目录
删除成功
这个东东不在了*/
2.移动文件或目录
创建一个目录 D:\aa,创建一个文件 F:\hello.txt,将hello.txt移动到目录aa下。
@Test
public void testMoveFile() throws IOException {
File file1 = new File("F:","hello.txt");
File file2 = new File("D:","aa");
//创建文件
if(!file1.exists()) {
System.out.println(file1.createNewFile() ? "文件创建成功": "文件创建失败");
}
//创建目录
if (!file2.exists()) {
System.out.println(file2.mkdirs() ? "目录创建成功" : "目录创建失败");
}
//移动后的文件对象,如果该对象已存在就会移动失败,若要实现覆盖效果,则先将其删除,再移动。
File file3 = new File(file2.getPath() + File.separator + file1.getName());
if(file3.exists()) {
file3.delete();
}
//移动文件,就是将现有的文件路径进行一个重命名,有点像linux系统中的用mv命令给文件重命名。
System.out.println(file1.renameTo(file3) ? "文件移动成功" : "文件移动失败");
}
3.获取文件或目录的名称,路径。
@Test
public void testGetFilVar() {
File file = new File("C:" + File.separator + "Users" + File.separator + "xzz" + File.separator + "Desktop"
+ File.separator + "11.txt");
// 获取文件名
String fileName = file.getName();
System.out.println("file名= " + fileName);
//文件名=11.txt
// 获取字符串形式的 父路径名称,
// 如果没有指定父路径,则返回null,如定义File file = new File("xzz");此时返回null.
String parent = file.getParent();
System.out.println("parent= " + parent);
//parent= C:\Users\xzz\Desktop
// 获取File对象形式的父路径名称,如果没有指定父路径,则返回null
File parentFile = file.getParentFile();
System.out.println("parentFile= " + parentFile);
//parentFile= C:\Users\xzz\Desktop
// 获取字符串形式的路径
String path = file.getPath();
System.out.println("path= " + path);
//path= C:\Users\xzz\Desktop\11.txt
}
4.获取目录中的文件和目录
@Test
public void testGetFiles() {
File file = new File("C:" + File.separator + "Users" + File.separator + "xzz" + File.separator + "Desktop");
if (file.exists()) {
//list()返回目录中的文件或目录名
String[] filesStr = file.list();
System.out.println(Arrays.toString(filesStr));
//[11.txt, demo]
//listFiles()返回目录中的文件或目录的file对象
File[] fileArr = file.listFiles();
System.out.println(Arrays.toString(fileArr));
//[C:\Users\xzz\Desktop\11.txt, C:\Users\xzz\Desktop\demo]
//获取当前系统可用的根目录
File[] files = File.listRoots();
System.out.println(Arrays.toString(files));
//[C:\, D:\, E:\, F:\, G:\]
}
}
注:还有以下几个方法,后续再跟进:
String[ ] list(FilenameFilter filter)
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FileFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
说明:*FilenameFilter 和 FileFilter是接口,它们都有一个accept方法,用于过滤。
5.获取文件或目录属性
@Test
public void testFileAttribute() {
//File file = new File("D:" + File.separator + "11.docx");
File file = new File("D:" + File.separator + "业务分析");
if(file.exists() ) {
//返回一个文件的大小,单位为字节。如果是一个目录,则返回的大小不确定。文件不存在,则返回0L.
long length = file.length();
System.out.println(length);
//测试该文件是否是一个隐藏的文件,根据底层平台约定是隐藏文件时,返回 true
System.out.println(file.isHidden());
//文件是最后修改时间
long modifyTime = file.lastModified();
System.out.println(modifyTime);
} else {
System.out.println("文件不存在");
}
}