java file 封装的功能室_java-File类

File类将文件和文件夹以及路径封装成对象,以提供更多的方法和属性来操作这些对象。File类不属于流对象,不能读写文件,但是可以作为参数传递给流对象的构造方法。

File学习的核心要点就是要熟练掌握其方法,配合其它对象,实现更多的功能。

一、File类中的静态常量

Windows下:

public static String separator,这是windows中的目录分隔符:\\

public static String separatorChar和上面一样,类型不一样

public stativ String pathSeparator,路径分隔符:;

public stativ char pathSeparatorChar char类型的路径分隔符

Linux下名字和类型都一样,只是值不一样。目录分隔符为:/路径分隔符为::

二、File类下的构造方法

File(String pathname)传递一个字符串类型的路径(路径可以目录的绝对地址,也可以是相对地址,更可以是文件,下同,都称之为路径),将次路径封装成为一个File对象

File(String parent, String child)传递字符串形式的子父路径,注意子和父是相对的概念

File(File parent, String child) 传递字符串形式的子和文件对象的父

三、File类的创建方法

以下方法,当目标路径存在时,均会返回false,创建成功返回true

boolean createNewFile() 创建文件,注意也只能创建文件,并不能创建目录

boolean mkdir()创建文件夹,注意只能创建一级目录

boolean mkdirs()创建多级目录

四、File类的删除方法

boolean delete() 删除指定目录或者文件,成功返回true,注意此删除不走回收站,文件夹不为空时没有办法删除

void deleteOnExit() jvm退出前删除,个人感觉用处不是很广泛

五、File类的判断方法

boolean exists()判断构造方法中封装的路径或者文件是否存在

boolean isAbsolute() 判断构造方法中封装的路径是不是绝对路径,是返回真

boolean isDirectory()判断是不是路径,是返回true

boolean isFile() 判断是不是文件,是返回true

boolean isHidden() 判断封装的路径(包括文件)是不是隐藏属性是返回true

六、File类的获取方法

String getName() 获取封装路径最后部分的名字,此方法不会判断路径是否存在,使用之前最好判断,如果是文件的话当然获取到的也就是文件的名字了

String getParent() 返回封装路径的父路径,注意封装的是相对路径时如果相对路径没有父路径,就会出错

File getParentFile()返回封装路径的父路径的File对象

String getAbsolutePath() 返回封装路径的绝对路径

File getAbsoluteFile() 返回封装路径的绝对路径的File对象

七、File类的其他方法

boolean renameTo(File f)重命名,File封装一个路径,这个对象调用renameTo(修改后的路径的File对象),修改成功返回真,失败返回假。修改名字后路径不同,方法renameTo带有剪切效果

long lastModified()返回File构造方法封装的路径中文件的最后修改时间的毫秒值

boolean setLastModified(long time)能查就能改

八、File的list方法

static File[] listRoots() 静态的方法,列出系统所以的根,光驱和移动设备存储也会算进去

String[] list()返回File构造方法封装的路径下的所有文件和文件夹

File[] listFiles()返回File构造方法封装的路径下的所有文件和文件夹,返回的File的对象,带全路径。

注意:

如果空目录调用了listFiles(),会返回一个长度为0的File数组,但是如果是文件调用了此方法,则会返回null。前后两者是有实质性区别的。空目录是存在长度为0的数组,文件是不存在,也就是null;

九、list方法的文件过滤器

一般遍历目录时,只想要获取特定类型的文件,其他的文件都必须过滤掉,这个就是文件过滤器的用处。

FileFilter只是一个接口,使用的时候需要自己实现来达到过滤文件的目的。FileFilter接口下只有一个accept()方法,所以使用的时候可以考虑使用匿名内部类来实现。具体用法就是讲FileFilter接口的实现对象传入list方法中即可。

一般实现accept方法的时候,建议将封装了纯路径的对象返回为true,否则如果剔除掉子目录的话就没有办法递归进入到子目录下。

以上一到九标题下的所有练习全部提供在一个demo中:

package file;

import java.io.File;

import java.io.FileFilter;

import java.io.IOException;

import java.util.Date;

import java.text.DateFormat;

/*

* file的练习

*/

public class FileDemo {

public static void main(String[] args) throws Exception {

mehtod_8();

}

/*

* file类的四个静态常量

* public static String separator 与系统有关的目录分隔符 Windows中 :\

* public static char separatorChar Linux中: /

* public static String pathSeparator 与系统有关的路径分隔符 Windows中 ; 分号

* public static char pathSeparatorChar Linux中 : 冒号

*/

public static void method(){

File f = new File("E:\\");

String s = f.separator;

System.out.println(s);

s = f.pathSeparator;

System.out.println(s);

}

/*

* file 类的构造方法

* 1. File(String pathName)

* 2. File(String parent, String child)

* 3. File(File parent, String child)

*/

public static void method_1(){

File f = new File("E:\\gama");

File f1 = new File("E:\\","game");

File f2 = new File(f,"gama");

System.out.println(f);

System.out.println(f1);

System.out.println(f2);

}

/* File类的创建方法 ,目标文件或者路径存在时,均会返回false

* 1. boolean createNewFile() 创建文件,成功返回true

* 2. boolean mkdir() 创建文件夹,成功返回true,只能创建一级目录

* 3. boolean mkdirs() 创建多级文件夹

*/

public static void method_2() throws IOException{

File f = new File("E:\\TEST.md");

System.out.println(f.createNewFile());

File f1 = new File("E:\\TEST\\TEST\\TEST\\");

System.out.println(f1.mkdirs());

}

/* File类的删除方法

* 1. boolean delete() 删除指定目录或者文件,成功返回true,注意此删除不走回收站,文件夹不为空时没有办法删除

* 2. void deleteOnExit() jvm退出前删除,

*/

public static void method_3() throws Exception{

File f = new File("E:\\1.txt");

//System.out.println(f.delete());

f.deleteOnExit();

Thread.sleep(5000);

}

/* File类的判断方法

* 1. boolean exists() 判断构造方法中封装的路径或者文件是否存在

* boolean isAbsolute() 判断构造方法中封装的路径是不是绝对路径,是返回真

* boolean isDirectory() 判断是不是路径,是返回true

* boolean isFile() 判断是不是文件,是返回true

* boolean isHidden() 判断封装的路径(包括文件)是不是隐藏属性是返回true

*/

public static void method_4() throws Exception{

File f = new File("E:\\a7d03c85ed46e9d87d8f766ec0be65de");

System.out.println(f.exists());

System.out.println(f.isAbsolute());

}

/*

* File类的获取方法

* 1.String getName() 获取封装路径最后部分的名字,此方法不会判断路径是否存在,使用之前最好判断

* 2.String getParent() 返回封装路径的父路径

* 3.File getParentFile() 返回封装路径的父路径的File对象

* 4.String getAbsolutePath() 返回封装路径的绝对路径

* 5.File getAbsoluteFile() 返回封装路径的绝对路径的File对象

*/

public static void method_5() {

File f = new File("src");

System.out.println(f.getAbsoluteFile().getParent());

}

/*File的其他方法

* 1.boolean renameTo(File f)重命名,File封装一个路径,这个对象调用renameTo(修改后的路径的File对象),

* 修改成功返回真,失败返回假。修改名字后路径不同,方法renameTo带有剪切效果

* 2.long lastModified()返回File构造方法封装的路径中文件的最后修改时间的毫秒值

* 3.boolean setLastModified(long time) 能查就能改

*/

public static void method_6() {

File f = new File("H:\\project\\Demo\\src\\io\\BufferedReaderDemo.java");

long time = f.lastModified();

DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);

String date = df.format(new Date(time));

System.out.println(date);

f.setLastModified(new Date().getTime());

date = df.format(new Date(f.lastModified()));

System.out.println(date);

}

/*

* File的list方法

* 1. static File[] listRoots() 静态的方法,列出系统所以的根,光驱和移动设备存储也会算进去

* 2. String[] list()返回File构造方法封装的路径下的所有文件和文件夹

* 3. File[] listFiles()返回File构造方法封装的路径下的所有文件和文件夹,返回的Filed对象,带全路径

*/

public static void method_7(){

File[] roots = File.listRoots();

for(File f: roots){

System.out.println(f);

}

}

/*

* 文件过滤打印

*/

public static void mehtod_8(){

File dir = new File("G:\\");

FilesFilter(dir);

}

//递归过滤方法的实现,选出目录下的*.java文件

//直接使用匿名内部内实现了FileFilter接口

public static void FilesFilter(File file) {

File[] files = file.listFiles(

new FileFilter(){

public boolean accept(File pathname){ //使用匿名内部类实现文件过滤器的接口

if(pathname.getName().endsWith(".java") || pathname.isDirectory()){

return true;

}else{

return false;

}

}

});

if (files != null) {

for (File f : files) {

if (f.isFile()) {

System.out.println(f);

} else

FilesFilter(f);

}

}

}

}

十、递归方法

所谓递归就是方法自身调用自身,层层调用,知道最底层的方法完成后一层层的退出知道最外层方法结束。比较的常见的就是文件的遍历和实现斐波那契数列等等。

递归可以一定程度上减少代码量,提高代码的可读性,也容易实现。但是缺点就是不能递归太多次,否则方法调用太多会占用太多的系统资源。

下面给出一个递归遍历全盘的demo:

package file;

/*

* 一个练习,统计电脑里面文件的总数

* 思路:递归

*

* 输出(感觉C盘部分文件没有统计到,有点少):

* C:\目录下有文件:205263个

* D:\目录下有文件:0个

* E:\目录下有文件:34746个

* F:\目录下有文件:3025个

* G:\目录下有文件:5616个

* H:\目录下有文件:141762个

* 390412

*/

import java.io.File;

public class FileTest {

public static void main(String[] args) {

File[] files = File.listRoots();

long filesNum = 0;

long temp = 0;

for (File f : files) {

filesNum = filesNum + countFiles(f);

System.out.println(f + "目录下有文件:" + (filesNum-temp) + "个");

temp = filesNum;

}

System.out.println(filesNum);

}

public static long countFiles(File file) {

long FilesNum = 0;

File[] files = file.listFiles();

if (files != null) {

for (File f : files) {

if (f.isFile()) {

FilesNum++;

} else

FilesNum = FilesNum + countFiles(f);

}

}

return FilesNum;

}

/*

* 斐波那契数列实现

*/

public static int getSum(int months){

if(months == 1 || months ==2)

return 1;

return getSum(months-1) + getSum(months-2);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值