package a;
//注:目录 directory就是文件夹
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
class MyFilter implements FileFilter{
@Override
public boolean accept(File pathname)
{
if(pathname.getName().endsWith(".java"))
//if(pathname.toString().endsWith(".java"))也可以
return true;
else
return false;
}
}
class MyJavaAndDirFilter implements FileFilter{
@Override
public boolean accept(File pathname) {
if(pathname.getName().endsWith(".java"))
return true;
else if(pathname.isDirectory())
return true;
else //非.java文件
return false;
}
}
public class Test {
//File类的3种构造方法
public static void f1()//File的构造方法1
{
//单纯的把路径变成File对象,路径存不存在不管
File file=new File("d:\\a");//路径名可以写到文件或文件夹
// \a的话前面的\会把a转义了(报错),\\前面的\会把后面的\转义了就是一个\
// 在java中写两条\\因为java会转义,但在windows中写一条\
//windows的文件夹名,文件名,路径名,都不区分大小写但Linux区分
//绝对路径:在系统中具有唯一性
//相对路径:路径之间的相对关系
System.out.println(file);
//输出:d:\a
}
public static void f2()//File的构造方法2
{
//File file=new File(String 父路径,String 子路径)
//这种方法可以单纯的操作父路径和子路径
File file1=new File("d:","a");
File file2=new File("d:\\a","b"); //起到一个为子字符串添加\\并拼接的作用
System.out.println(file1);//输出:d:\a
System.out.println(file2);//输出:d:\a\b
}
public static void f3()//File的构造方法2
{
//File file=new File(File 父路径,String 子路径)
File file=new File("d:\\a");
File file1=new File(file,"b");
System.out.println(file1);//d:\a\b
}
//File类的创建文件,创建文件夹,删除文件和文件夹
public static void f4() throws IOException//用File对象创建构造方法中路径所指定的文件
//这个方法会抛出异常
{//还需要在mian()上抛出
File file=new File("D:\\a\\hehe.txt");
boolean b=file.createNewFile();//注:发方法只能创建文件不能创建文件夹,如果文件已经存在了
System.out.println(b);//就不再创建,返回false。创建的文件路径和文件名,在构造方法中给出
//系统中的文件和文件夹不能用有没有后缀来区分。
}
public static void f5()//用File对象创建构造方法中路径所指定的文件夹
{
File file=new File("D:\\a","bb\\aa\\cc");//可以创建嵌套的一级或者多级文件夹
boolean b=file.mkdirs();
System.out.println(b);
//创建的路径在File构造方法中给出,如果文件夹已经存在了,不再创建,返回false
}
public static void f6()//删除文件或文件夹,路径已经在构造方法中给出
{
File file =new File("D:\\a","bb\\aa\\cc");//cc被删除了
boolean b=file.delete();
System.out.println(b);
//返回true:删除成功
//返回true:删除失败,该文件或文件夹 不存在或文件处于打开状态
//该删除不走回收站,直接从硬盘中删除
}
//File类的获取功能:
public static void f7()//获取路径中最后部分的名字,,路径在构造方法中给出
{
File file1=new File("D:\\java\\day14\\bin\\afternoon");
System.out.println(file1.getName()); //afternoon
File file2=new File("D:\\java\\day14\\bin\\afternoon\\Homework.class");
System.out.println(file2.getName()); //Homework.class
}
public static void f8()//获取父路径(getName()的前部分路径),,路径在构造方法中给出
{
File file1=new File("D:\\java\\day14\\bin\\afternoon");
System.out.println(file1.getParentFile());
File file2=new File("D:\\java\\day14\\bin\\afternoon\\Homework.class");
System.out.println(file2.getParentFile());
}
public static void f9()//获取绝对路径,路径在构造方法中给出
{
File file1=new File("D:\\java\\day14\\bin\\afternoon");
File file2=new File("D:\\java\\day14\\bin\\afternoon\\Homework.class");
System.out.println(file1.getAbsoluteFile());//返回值为File类对象
//输出:D:\java\day14\bin\afternoon
System.out.println(file2.getAbsoluteFile());//返回值为File类对象
//输出:D:\java\day14\bin\afternoon\Homework.class
}
public static void f10()//获取文件对应的字节数,路径在构造方法中给出
{
File file=new File("D:\\java\\day14\\bin\\afternoon\\Homework.class");
System.out.println(file.length());//返回文件的【字节】数
}
public static void f11()//获取该目录中(只一层)的文件和目录名,路径在构造方法中已给出
{
File file=new File("E:\\workspace\\thinking in java\\src");
File[] fileArr=file.listFiles();
for(File f:fileArr)
System.out.println(f);
}
public static void f12()//获取该目录中(只一层)的.java文件,路径在构造方法中已给出
{
File file=new File("E:\\workspace\\thinking in java\\src");
File[] fileArr=file.listFiles(new MyFilter());
for(File f:fileArr)
{
System.out.println(f);
}
//Filter:过滤
//listFiles()的重载方法:listFiles(FileFilter fileter) FileFilter是接口,要自己定义接口的实现类,在里面实现该接口
//重写public boolean accept(File pathname)方法
//File[] fileArr=file.listFiles(new MyFilter());的过程:listFiles方法产生一个绝对路径就会调用一次FileFilter实现类
//中的accept()方法,把它的路径作为accept的参数(File pathname)在accept方法体中对该路径进行处理,当accept方法返回true
//这个listFiles方法收到true就把路径装进fileArr数组中,当返回false不放进数组中。
//注:接口中的方法public的
}
//获取该目录中的[所有]文件和文件夹(目录),路径在构造方法中已给出
public static void f13()
{
File file =new File("E:\\workspace\\thinking in java\\src");
printAllFile(file);
}
public static void printAllFile(File file)
{
System.out.println(file);
File[] fileArr=file.listFiles();
for(File f:fileArr)
{
if(f.isDirectory())//是个目录的话
printAllFile(f);
else //是文件的话
System.out.println(f);
}
}
//获取该目录中的[所有]的.java文件,路径在构造方法中已给出
public static void f14()
{
File file=new File("E:\\workspace\\Thinkinginjava\\src");
printAllJavaFile(file);
}
public static void printAllJavaFile(File file)
{
File[] fileArr=file.listFiles(new MyJavaAndDirFilter());
for(File f:fileArr)
{
if(f.isDirectory())
printAllJavaFile(f);
else
System.out.println(f);
}
}
//判断
public static void f15()//判断File构造方法中封装的路径是真实否存在的
{
File file1=new File("E:\\workspace\\Thinkinginjava\\src");
boolean b1=file1.exists();//存在返回false
System.out.println(b1);
File file2=new File("E:\\wdsfhsdjfhjdfh");
boolean b2=file2.exists();//不存在返回false
System.out.println(b2);
}
public static void f16()//判断File构造方法中封装的路径是不是一个目录(File中只有目录和文件两种类型)
//不是目录就是文件,它还可以判断这个路径是否是真实存在的
{
File file=new File("E:\\workspace\\Thinkinginjava\\src");
boolean b=file.isDirectory();
System.out.println(b);
}
public static void main(String[] args) {
}
}