IO流之前要先懂得如何封装硬盘上的以文件或者目录,使用File类;File类是用来描述文件或者目录(文件夹)的路径的抽象表现形式
本节我们就开始讨论File类
常用的构造方法:
public File(String pathname):给定路径名以字符串来表示当前这个文件或者文件夹(开发中推荐使用第一种构造方法)
public File(String parent,String child):根据 parent路径名字符串和 child路径名字符串创建一个新 File对象
public File(File parent, String child):根据 parent抽象路径名和 child 路径名字符串创建一个新 File实例
需求:要表示当前计算机e盘下一个demo文件夹中的一个a.txt文件
实例1
package org.westos_01;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
//创建一个File实例---文件
//方式1
File file = new File("E:\\demo\\a.txt") ;
System.out.println(file);
//方式2
File file2 = new File("E:\\demo", "a.txt") ;
System.out.println(file2);
//方式3
File file3 = new File("E:\\demo") ;
File file4 = new File(file3, "a.txt") ;
System.out.println(file4);
}
}
使用File对象可以创建文件或者文件夹
创建有关的成员方法:
public boolean mkdir()创建此抽象路径名指定的目录(文件夹)。
注意:如果当前某个盘符下已经有了这个目录(文件夹),不会再创建了; 如果找不到文件的路径就会报错
public boolean createNewFile():创建文件的,如果已经有这个文件了,不再创建。
注意:该方法本身就会 编译时期异常IOException
public boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
注意:可以在不存在的目录中创建文件夹---也就是 如果找不到当前路径,就会自己创建
注意事项:
(1)自己要清楚要创建的是文件夹还是文件,每个方法都不一样!
(2)没有带盘符,默认到当前项目下创建文件或者文件夹
实例2
package org.westos_02;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
//需要在E盘下创建一个新的文件夹:demo
//描述一下这个文件的抽象路径形式
//用File对象来封装当前这个文件夹
File file = new File("e:\\demo") ;
//创建文件夹
System.out.println("mkdir:"+file.mkdir());
//public boolean createNewFile():创建文件:在E盘下的demo文件夹中创建a.xt文件
File file2 = new File("E:\\demo\\a.txt") ;
System.out.println("createNewFile:"+file2.createNewFile());
//需求:在E盘下的test文件夹下创建一个b.txt文件
// File file3 = new File("e:\\test\\b.txt") ;//创建文件之前,确保当前盘符下有这个文件夹,否则,IOEXception:系统找不到指定路径
// System.out.println("createNewFile:"+file3.createNewFile());
//public boolean mkdirs()
//需求:在e盘下创建aaa文件夹,在创建子目录bbb--->ccc--ddd
//创建File对象来封装
File file4 = new File("E:\\aaa\\bbb\\ccc\\ddd") ;
//public boolean mkdirs()
System.out.println("mkdirs:"+file4.mkdirs());
没有带盘符,默认到当前项目下创建了文件
File file5 = new File("a.txt") ;
System.out.println("createNewFile:"+file5.createNewFile());
}
}
如果不小心创建文件或者文件夹的时候,没有写盘符那么就会当前项目下进行创建
public boolean delete()删除此抽象路径名表示的文件或目录
注意事项:
删除的方法 不能删除带有目录或者文件的文件夹
删除多个目录,必须逐一删除!
实例3
package org.westos_03;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
//在当前项目下创建aaa\\bbb\\ccc
File file = new File("aaa\\bbb\\ccc") ;
System.out.println("mkdirs:"+file.mkdirs());
//需求:要删除当前项目下的a.txt文件
File file2 = new File("a.txt") ;//当前路径有此文件
System.out.println("delete:"+file2.delete());
//需求:删除aaa\\bbb\\ccc
File file3 = new File("aaa\\bbb\\ccc") ;
System.out.println("delte:"+file3.delete());
File file4 = new File("aaa\\bbb") ;
System.out.println(file4.delete());
File file5 = new File("aaa") ;
System.out.println(file5.delete());
}
}
File类中的
重命名功能
public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
1)使用这个功能: 当两个抽象路径一致,那么只是重命名
2)当这两个 抽象路径不一致,剪切并且改名了
实例4
package org.westos_03;
import java.io.File;
public class FileDemo2 {
public static void main(String[] args) {
//现在要描述当前项目下有一个a1.jpg
File file = new File("a1.jpg") ;//当前路径应该有该图片
//使用重命名功能:文件名称该成:a2.jpg
File file2 = new File("a2.jpg") ;
//调用功能
file.renameTo(file2) ;
//需求:将当前项目下的a1.jpg--->复制到e:\\a1.jpg
File file3 = new File("a2.jpg") ;
//E:\\a2.jpg
File file4 = new File("E:\\a1.jpg") ;
file3.renameTo(file4) ;
}
}
File类中的
判断功能
public boolean isDirectory():判断是否是文件夹 经常用到
public boolean isFile():判断是否是一个标准文件 经常用到
public boolean canRead():判断是否可读
public boolean canWriter():判断是否可写
public boolean isHidden():判断是否是隐藏文件
public boolean isAbsolute():判断次路径名是否是绝对路径
实例5
package org.westos_04;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
//在当前项目下创建一个文件
File file = new File("a.txt") ;
//System.out.println(file.createNewFile());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.canRead());
System.out.println(file.canWrite());
System.out.println(file.isHidden());
System.out.println(file.isAbsolute());
}
}
File类中的
获取功能
public File getAbsolutePath():获取当前文件或者文件夹绝对路径
public String getPath():获取相对路径
public long length()返回由此抽象路径名表示的文件的长度
public long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间
public String getName():获取名称
实例6
package org.westos_04;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileDemo2 {
public static void main(String[] args) {
File file = new File("a.txt") ;
//绝对路径
System.out.println(file.getAbsolutePath());//E:\javacode\workspace\day17_File\a.txt
//相对路径
System.out.println(file.getPath());//a.txt
System.out.println(file.getName());
System.out.println(file.length());//描述文件内容 长度
System.out.println(file.lastModified());//1511075302018 long:时间毫秒值
//long---->Date---->String"日期文本格式"
//创建日期对象
Date d = new Date(1511075302018L) ;
//创建一个SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
//格式化
String dateStr = sdf.format(d) ;
System.out.println(dateStr);//2017-11-19 15:08:22
}
}
File类的
高级获取功能
public String[] list():返回对象是一个字符串数组,当前哪个一盘符下的所有的文件以及文件夹的字符串名称数组
public File[] listFiles():返回对象是一个File数组,当前哪个盘下的所有的文件以及文件夹的File数组
实例7
package org.westos_05;
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
//需求:获取e盘下所有的文件夹以及文件的字符串名称数组
//用File对象封装下e盘
File file = new File("E:\\") ;
public String[] list()
String[] strArray = file.list() ;
//遍历:遍历之前,一定要做非空判断
if(strArray!=null){
//增强for遍历
for(String s:strArray){
System.out.println(s);
}
}
System.out.println("------------------------------------------");
//public File[] listFiles():
File[] fileArray = file.listFiles() ;
if(fileArray !=null){
for(File f :fileArray){
System.out.println(f.getName());
}
}
}
}
练习1
package org.westos_05;
import java.io.File;
/**
* 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
*
* 分析:
* 1:用File对象封装E盘
* 2:获取当前e盘下的所有的文件以及文件夹的名称数组或者File数组
* 3):针对对象要做非空判断
* 4)遍历:File数组增强for遍历
* 获取每一个File对象
* 判断这个File对象是否是文件:isFile()
* 如果是文件,还要判断是否以.jpg结尾
* 是,就输出
* 不是,不管
* @author Apple
*/
public class FileTest {
public static void main(String[] args) {
//1)封装E盘
File srcFile = new File("e:\\") ;
//2)获取当前e盘下的所有的文件以及文件夹的File数组
File[] fileArray = srcFile.listFiles() ;
//3)给当前对象判断
if(fileArray !=null){
//增强for遍历这个File数组
for(File file :fileArray){
//获取到每一个file对象
if(file.isFile()){
//是文件
//要需要判断是否以.jpg结尾的文件
if(file.getName().endsWith(".jpg")){
System.out.println(file.getName());
}
}
}
}
}
}
练习2
package org.westos_05;
import java.io.File;
import java.io.FilenameFilter;
/**
* 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
*
* 方式1:封装,然后获取所有的文件以及文件夹的File数组,遍历,判断...输出
* 方式2:在获取的时候就已经满足条件
*
* 引出:文件名称过滤器 -------Javaweb中将过滤器以及上传和下载.
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
*
* 参数是一个接口,(开发中使用的接口的匿名内部类的方式)
* 实现一个方法:
* boolean accept(File dir, String name):这个方法的返回值是true(就是表示要将当前文件夹或者文件的名称添加数组中),false(表示不添加数组中)
* @author Apple
*/
public class FileTest2 {
public static void main(String[] args) {
//1)封装e盘
File file = new File("e:\\") ;
//2)public String[] list(FilenameFilter filter)
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// return false;
//该逻辑是需要根据需求来判断的
//该方法中的返回值是需要我们自己判断的,根据需求做逻辑判断
/*File file = new File(dir, name) ;
//判断File是否是文件
boolean flag1 = file.isFile() ;
//如果是文件,还要判断是否以".jpg"结尾
boolean flag2 = name.endsWith(".jpg") ;
return flag1 && flag2 ;*/
return new File(dir,name).isFile() && name.endsWith(".jpg") ;
}
});
//遍历字符串数组
for(String s : strArray){
System.out.println(s);
}
}
}