关闭

Java基础-File概述

标签: javaFileapi源码
227人阅读 评论(0) 收藏 举报
分类:


File类的概述

File更应该叫做一个路径

文件路径或者文件夹路径
路径分为绝对路径和相对路径
绝对路径是一个固定的路径,从盘符开始
相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下

查看API指的是当前路径

文件和目录路径名的抽象表示形式

构造方法

	* File(String pathname):根据一个路径得到File对象
	* File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
	* File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

File类的创建功能

	* public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
	* public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
	* public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

	public static void main(String[] args) {
		File file1 = new File("file1.txt");
		System.out.println(file1.createNewFile());			//如果没有就创建,返回true
		
		File file2 = new File("file2");
		System.out.println(file2.createNewFile());
		
		File dir1 = new File("dir1");
		System.out.println(dir1.mkdir());
		
		File dir2 = new File("dir2.txt");				//这样写是可以的,文件夹也是可以有后缀的
		System.out.println(dir2.mkdir());
		
		File dir3 = new File("dir3\\dir3_1");
		System.out.println(dir3.mkdirs()); 				//创建多级目录
	}
	/*
	 * outPut:
	 * true
	 * true
	 * true
	 * true
	 * true
	 */

创建前:                      创建后:

注意事项:

如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。

File类的重命名和删除功能

	* public boolean renameTo(File dest):把文件重命名为指定的文件路径
	* public boolean delete():删除文件或者文件夹

重命名注意事项

如果路径名相同,就是改名。

如果路径名不同,就是改名并剪切。

删除注意事项

Java中的删除不走回收站。

要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹

File类的判断功能

	* public boolean isDirectory():判断是否是目录
	* public boolean isFile():判断是否是文件
	* public boolean exists():判断是否存在
	* public boolean canRead():判断是否可读
	* public boolean canWrite():判断是否可写
	* public boolean isHidden():判断是否隐藏

	public static void main(String[] args) {
		File dir1 = new File("file1.txt");
		System.out.println(dir1.isDirectory());			//判断是否是目录
		
		File dir2 = new File("dir1");
		System.out.println(dir2.isDirectory());
		File dir3 = new File("E:\\");
		System.out.println(dir3.isDirectory());
		
		System.out.println("------");
		
		System.out.println(dir1.isFile());				//判断是否是文件
		System.out.println(dir2.isFile());
		
		System.out.println("------");
		
		File file1 = new File("file1.txt");
		file1.setReadable(false);
		System.out.println(file1.canRead()); 			//windows系统认为所有的文件都是可读的
		file1.setWritable(false);
		System.out.println(file1.canWrite()); 			//windows系统可以设置为不可写
		
		System.out.println("------");
		
		File file2 = new File("dir1");
		System.out.println(file2.isHidden());			//判断是否是隐藏文件
		System.out.println(file1.isHidden());
	}

false
true
true
------
true
false
------
true
false
------
false
true

File类的获取功能

	* public String getAbsolutePath():获取绝对路径
	* public String getPath():获取路径
	* public String getName():获取名称
	* public long length():获取长度。字节数
	* public long lastModified():获取最后一次的修改时间,毫秒值
	* public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
	* public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组 


	    public static void main(String[] args) throws IOException {
        File file1 = new File("file1.txt");
        File file2 = new File("E:/StudyHard/File/dir");
        System.out.println(file1.getAbsolutePath());            //获取绝对路径
        System.out.println(file2.getAbsolutePath());
        
        System.out.println(file1.getPath());                    //获取构造方法中传入路径
        System.out.println(file2.getPath());
        
        System.out.println(file1.getName());                    //获取文件或者文件的名字
        System.out.println(file2.getName());
        
        System.out.println("--------");
        
        System.out.println(file2.length());                        //如果是目录定为0
        
        System.out.println("--------");
        
        Date d = new Date(file1.lastModified());                //文件的最后修改时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        System.out.println(sdf.format(d));
        
        System.out.println("--------");
        
        File dir = new File("E:/StudyHard/File");
        String[] fileNames = dir.list(); //若dir为文件,则返回null
        System.out.println(fileNames.length);
        
        File[] files = dir.listFiles();
        System.out.println(files.length);
    }

E:\StudyHard\File\file1.txt
E:\StudyHard\File\dir
file1.txt
E:\StudyHard\File\dir
file1.txt
dir
--------
0
--------
2016年08月29日 18:27:29
--------
10
10

文件名称过滤器的概述及使用

	* public String[] list(FilenameFilter filter)
	* public File[] listFiles(FileFilter filter)


	public static void main(String[] args) throws IOException {
		File dir = new File("E:\\");
		String[] arr = dir.list(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				File file = new File(dir,name);
				return file.isFile() && file.getName().endsWith(".jpg");
			}
		});
		System.out.println(arr.length);
	}

简单源码分析(JDK1.8)

    public String[] list(FilenameFilter filter) {
        String names[] = list(); //list方法获取该目录下所有文件名
        if ((names == null) || (filter == null)) {
            return names;
        }
        List<String> v = new ArrayList<>();//创建一个List集合
        for (int i = 0 ; i < names.length ; i++) {//遍历names
            if (filter.accept(this, names[i])) {//根据我们创建的filter的条件(返回true or false)过滤
                v.add(names[i]);
            }
        }
        return v.toArray(new String[v.size()]);//最后将集合转换为数组
    }

File小习

需求:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名

	public static void main(String[] args) throws IOException {
		File dir = getDir();
		printJavaFile(dir);
	}
	public static File getDir() {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个文件夹路径");
		while(true) {
			String line = scanner.nextLine();
			File dir = new File(line);
			if(!dir.exists()) {
				System.out.println("您录入的文件夹路径不存在,请重新录入");
			} else if(dir.isFile()) {
				System.out.println("您录入的是文件路径,请重新录入文件夹路径");
			} else {
				scanner.close();
				return dir;
			}
		}
	}
	public static void printJavaFile(File dir) {
		File[] subFiles = dir.listFiles();
		for (File file : subFiles) {
			if(file.isFile() && file.getName().endsWith(".java")) {
				System.out.println(file);
			} else if(file.isDirectory()){
				printJavaFile(file);//如果是文件夹则递归调用
			}
		}
	}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19296次
    • 积分:855
    • 等级:
    • 排名:千里之外
    • 原创:68篇
    • 转载:7篇
    • 译文:0篇
    • 评论:7条