File是java中io包里的类,不分操作系统,在windows和linux用法一样。
文件当然离不开路径了:
相对路径:是一个简化的路径 相对当前项目的根路径 如:FileUtil.txt
绝对路径:是一个完整的路径 以盘符开始 如:F:\BaiduNetdiskDownload\FileUtil.txt
注意:
1.路径不区分大小写
2.路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠
各个操作系统路径写法不一样,File也有处理方式
File.pathSeparator //路径分隔符,windows分号; linux是冒号:
File.separator //文件名称分隔符 windows反斜杠 \ linux 正斜杆 /
File类的三大构造方法
-
File(String pathname) //pathname可以是目录或者文件,相对路径和绝对路径都可以
File重写了Object的toString方法 file.toString为File路径
-
File(String parent,String child) 根据parent
路径字符串和child路径字符串创建一个新File实例
参数:把路径分成了两部分 父路径和子路径可以单独书写,使用起来非常灵活,父路径和子路径可以变化
File(“c://”,“a.txt”); -
File(File parent,String child) 用法和上面相同,可以放file文件 很方便
File类创建功能的方法
- boolean createNewFile() 不存在就返回true;存在返回false并创建文件,
注意:1-此方法只能创建文件,不能创建文件夹
2-创建文件的路径必须存在,否则会抛出异常 - boolean mkdir() 创建目录
注意:1-此方法只能创建文件夹,不能创建文件
2-不存在就返回true并创建文件夹;存在返回false;参数路径不存在也返回false - boolean mkdirs() 创建多级目录
单级和多级都可以使用。
File类判断功能的方法
1.boolean delete()
删除成功为true 文件夹中有内容,不会删除返回false,路径不存在也返回false。该删除为硬盘删除,不走回收站。
2 boolean deleteOnExit()文件使用后删除
File类获取功能的方法
1.String getName()//返回文件或者目录名称
2.String getPath()//将File转换为路径字符串
3.String getAbsolutePath()//获取File的绝对路径字符串
4.String getParent()//如果没有父目录返回null
5.long lastModified()//获取最后一次修改的时间
6.long length()//返回File表示的文件的长度,以字节为单位 、、文件夹没有大小概念,返回0。如果是错误路径,返回0
7.boolean renameTo(File f)
8.File[] liseRoots()//获取机器盘符
9.String[] list()返回的是字符串数组,直接是子的名称,不包含子文件夹中的
10.File[] listFiles()//返回的是直接子目录(文件)的抽象
注意:list()和listFiles()中
如果:构造方法目录的路径不存在,抛出空指针异常
如果:构造方法中路径不是目录,也抛出空指针异常
File类判断功能的方法
1 boolean canExecute() 判断文件是否可以执行
2 boolean canRead() 判断文件是否可读
3 boolean canWrite() 判断文件是否可写
4 boolean exist() 判断文件是否存在
5 boolean isDirectory() 判断文件是目录
6 boolean isFile() 判断是否是文件
7 boolean canHidden() 判断文件是否可见
8 boolean isAbsolute() 判断文件是否是绝对路劲 ,文件不存在也能判断
FileFilter和FilenameFilter
FileFilter是一个过滤File的接口
boolean accept(File pathname)
通过实现接口或匿名内部类的方式使用,file集合中的每一个文件都执行一下FileFilter中的accept方法,true通过,false拦截
FilenameFilter是过滤File名称的接口
boolean accept(File dir,String name) 测试指定文件是否应该包含在某个文件列表中
参数:File dir:构造方法中传递的被遍历的文件所在目录。String name:使用ListFiles方法遍历目录,获取的每一个文件、文件夹的名称。
当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。
FilenameFilter的性能比FileFilter的好.
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
boolean flag = false;
if (pathname.getName().toLowerCase().endsWith(".ico")) {//输出后缀为.ico的文件路径 toLowerCase()大写字符转小写
flag = true;
}
return flag;
}
});
补充:
String中 startsWith、endsWith():
toLowerCase()大写字符转小写
if(a.startsWith(b)) //判断字符串a 是不是以字符串b开头。
if(a.endsWith(b)) //判断字符串a 是不是以字符串b结尾
File类实现功能需求
利用递归列出某目录下所有文件
public static void main(String[] args) {
try {
listDirectory(new File("D://upload"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void listDirectory(File dir) throws IOException{
String [] filenames =dir.list();//返回的是字符串数组,直接是子的名称,不包含子文件夹中的
File[] files =dir.listFiles();//返回的是直接子目录(文件)的抽象
//递归遍历目录
if(files!=null && files.length>0){
for(File file:files){
System.out.println(file);
if(file.isDirectory()) {
//递归
listDirectory(file);
}
}
}
}
读取文件内容
try {
// FileReader fileReader =new FileReader("C:\\Users\\Admin\\Desktop\\备注.txt");
// BufferedReader bufferedReader =new BufferedReader(fileReader); //出现中文乱码
File file =new File("C:\\Users\\Admin\\Desktop\\备注.txt");
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));
String str2 = bufferedReader.readLine();
while (str2 !=null){
System.out.println(str2);
str2 =bufferedReader.readLine();
}
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
写入文件
try {
FileWriter fileWriter = new FileWriter("C:\\Users\\Admin\\Desktop\\readme.txt");
fileWriter.write("你看见门口,大量的地方");
fileWriter.flush();
fileWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
文件过滤
public static void main(String[] args){
File[] files =File.listRoots();
for(File file:files){
System.out.println(file);
if(file.length()>0){
String[] filenames =file.list(new FilenameFilter(){
//file 过滤目录 name 文件名
public boolean accept(File file,String filename){
return filename.endsWith(".mp3");
}
});
for(String filename:filenames){
System.out.println(filename);
}
}
}
}