File类

第1章 IO概述

回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。

当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
因此我们把这种输入和输出动作称为IO操作。

第二章 File

简单了解IO是怎么一回事之后,接下来就要进一步做系统了解。

在我们操作系统中,数据都保存在文件中,而文件存放相应的文件夹中。那么Java中是如何描述这些的呢?

2.1 File类的出现

打开API,搜索File类。阅读其描述:File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。那么我们就要研究研究File这个类中都有那些功能可以操作文件或者文件夹呢?

这类具有平台无关性,既可以适合unix系统也适合window系统。

File静态方法的调用。

%title插图%num

package cn.hiluna.demo;

import java.io.File;
/**
 * java.io.File
 *  将操作系统中的,文件,目录(文件夹),路径封装成file对象
 *  提供方法,操作系统中的内容
 *  File与系统无关的类
 *  文件--file
 *  目录--directory
 *  路径--path
 */
public class FileDemo {
    public static void main(String[] args){
        //File类静态成员变量
        //与系统有关的路径分隔符
        String separator = File.pathSeparator;
        System.out.println(separator);//是一个分号,表示一个目录的分割。Linux :

        //与系统有关的默认名称分隔符
        separator = File.separator;
        System.out.println(separator);//是一个向右的,目录的名称分割  linux  /
    }
}

1.3 File类的构造方法。

路径:

  • 绝对路径:在系统中具有唯一性。
    1. c:windowssystem32
    2. http://www.baidu.com
  • 相对路径:表示的是路径之间的相对关系。
    1. d:developJavajdkbin
    2. d:developJavajre7
    3. 路径之间的关系:
      java 父目录是d:develop
      java 子目录是jdk jre7
    4. 父目录是唯一性
    5. 子目录是多个的

File类的三种构造器

%title插图%num

package cn.hiluna.demo;

import java.io.File;

/**
 *  File类的构造方法
 *  三种重载形式
 */
public class FileDemo1 {
    public static void main(String[] args){
        function();
        function_1("zhang");
        function_2();
    }
    /**
     *  File(File parent,String child)
     *  传递路径,传递File类型的父路径,字符串类型的子路径
     *  好处:父路径是File类型,父路径可以直接调用File类的方法。
     */
    public static void function_2(){
        File parent = new File("User");
        File file = new File(parent,"zhang");
        System.out.println(file);
    }
    /**
     *  File(String parent,String child)
     *  传递路径,传递字符串父路径,字符串的子路径
     *  好处:单独操作父路径和子路径
     */
    public static void function_1(String child){
        File file = new File("User",child);
        System.out.println(file);
    }
    /**
     *  File(String pathname)
     *  传递路径名:可以写到一个文件夹,可以写到一个文件。
     *  例如:c:abc  或者  c:abcDemo.java
     *  将路径封装为File类型对象
     */
    public static void function(){
        /**
         *  windows下文件、目录名不区分大小写,linux区分
         *  这个方法不会管你的路径是否正确。单独有判断的功能。单纯的是把路径变为对象
         */
        File file = new File("/Users/zhang/Desktop/idea-workspace");
        System.out.println(file);
    }
}


File类创建文件、文件夹、删除功能

java在线中文api文档

package cn.hiluna.demo;

import java.io.File;
import java.io.IOException;

/**
 *  File类的创建和删除功能
 *  文件或者是目录
 */
public class FileDemo2 {
    public static void main(String[] args)throws IOException{
        function();
        function_1();
    }
    /**
     *  File类的删除功能
     *  boolean delete()
     *  删除的文件或者是文件夹,在File构造方法中给出
     *  删除成功返回true,删除失败返回false
     *  删除方法,不走回收站,直接从硬盘中删除
     *  删除有风险,运行需谨慎
     */
    public static void function_2(){
        File file = new File("c:abc");
        boolean b = file.delete();
        System.out.print(b);
    }
    /**
     *  File创建文件夹功能
     *  返回值:boolean。成功为true。
     *  mkdir()
     *  mkdirs()可以创建多层次的文件夹,同时他也可以创建一层文件夹,
     *  即包裹了mkdir()这个函数的功能
     *  创建的路径也在File构造方法中给出
     *  已经存在,不再创建
     */
    public static void function_1(){
        File file = new File("/Users/zhang/Desktop/idea-workspace/ABC/A/B");
        boolean b = file.mkdirs();
        System.out.println(b);
    }
    /**
     *  File类创建文件的功能
     *  返回值:boolean。成功为true。
     *  createNewFile()
     *  创建的文件的路径和文件名,是在File构造方法中给出
     *  如果文件已经存在,则不在创建。
     *  这个方法只能创建文件不能创建文件夹。
     */
    public static void function()throws IOException {
        File file = new File("/Users/zhang/Desktop/idea-workspace/a.txt");
        boolean b = file.createNewFile();
        System.out.println(b);
    }

}

File类获取功能

  • 获取构造方法中的父路径。
  • 获取构造方法中的绝对路径。
  • 获取构造方法中文件的字节数。
  • 获取构造方法中文件或目录的文件名。
package cn.hiluna.demo;

import java.io.File;

public class FileDemo3 {
    /**
     *  File类的获取功能
     */
    public static void main(String[] args){
        function();
        function_1();
        function_2();
        function_3();
    }
    /**
     *  File类的获取功能
     *  String getParent()  返回String对象
     *  File getParentFile()返回File对象
     *  获取父路径
     *  盘符为最高目录没有父目录,在拿为null。
     */
     public static void function_3(){
         File file = new File("E:day22srccnhilunademoFileDemo.java");
         File parent = file.getParentFile();
         System.out.println(parent);
     }
    /**
     *  File类的获取功能
     *  String getAbsolutepath()  返回String对象
     *  File getAbsoluteFile()    返回File对象
     *  获取绝对路径
     *  eclipse环境中,写的是一个相对路径,绝对位置为工程根目录。
     */
    public static void function_2(){
        File file = new File("E:day22srccnhilunademoFileDemo.java");
        File file1 = file.getAbsoluteFile();
        System.out.println(file1);
    }
    /**
     *  File类获取功能
     *  long length()
     *  返回路径中表示的文件的字节数,拿不到文件夹的字节数
     */
    public static void function_1(){
        File file = new File("E:day22srccnhilunademoFileDemo.java");
        long length = file.length();
        System.out.println(length);
    }
    /**
     *  File类的获取功能
     *  String getName()
     *  返回路径中表示的文件或者文件夹名
     *  获取路径中的最后部分的名字,可以为文件夹,也可以为文件名。
     *  即使为错误的路径或者文件名,也一样获取。
     */
    public static void function(){
        File file = new File("d:eclipseeclipse.exe");
        String name = file.getName();
        System.out.println(name);

        String path = file.getPath();//将File中封装的路径转化为一个字符串
        System.out.println(path);
        System.out.println(file);
    }
}

程序运行截图:

%title插图%num


File类的判断功能

  • 判断构造方法中的路径是否为文件。
  • 判断构造方法中的路径是否为文件夹。
  • 判断构造方法中的路径是否存在。
package cn.hiluna.demo;

import java.io.File;

public class FileDemo4 {
    /**
     *  File类的判断功能
     */
    public static void main(String[] args){
        function();
        function_1();
    }
    /**
     *  File判断功能
     *  boolean isDirectorty()
     *  判断是否为目录
     *  是 true 不是false
     *
     *  boolean isFile()
     *  判断是否为文件
     */
    public static void function_1(){
        File file = new File("E:day22srccnhilunademoFileDemo.java");
        if(file.exists()){//先判断是否存在
            boolean b = file.isDirectory();
            System.out.println(b);
        }

    }
    /**
     *  File判断功能
     *  boolean exists()
     *  判断File构造方法中封装路径是否存在
     *  存在ture,不存在false
     *  同样写相对路径,他的绝对路径同样为工程根目录
     */
    public static void function(){
        File file = new File("E:day22srccnhilunademoFileDemo.java");
        boolean b = file.exists();
        System.out.println(b);
    }
}


File类获取功能-2

  • list
  • listFiles
  • listRoots(是一个静态的方法)
list方法:

返回值:String[]
调用方法:file.list();
获取到,File构造方法中封装的路径中的文件和文件夹名(遍历一个目录)
返回只有名字

代码如下:

public static void function(){
        File file = new File("c:");
        String[] strArr = file.list();
        System.out.println(strArr.length);
        for (String str : strArr){
            System.out.println(str);
        }
    }

运行结果:

%title插图%num

listFiles方法:

返回值:File[]
调用方法:file.listFiles();
获取到,File构造方法中封装的路径中的文件和文件夹名(遍历一个目录)

返回的是目录或者文件的全路径

推荐使用

代码如下:

public static void function_1(){
        File file = new File("c:");
        File[] fileArr = file.listFiles();
        for (File f : fileArr){
            String s =f.toString();//转为String类型
            System.out.println(f);
        }
    }

运行结果:

%title插图%num

listRoots方法:

返回值:File[]
调用方法:File.listRoots();
获取系统所有根目录

代码如下:

public static void function_2(){
        //获取系统中所有根目录
        File[] fileArr = File.listRoots();
        for (File f : fileArr){
            System.out.println(f);
        }
    }

运行结果:

%title插图%num


文件获取过滤器

  1. 通过listFiles方法获取目录的时候,可以根据需求,只获取满足条件的文件。
  2. 这里用到的方法是listFiles()的重载形式
  3. listFiles(FileFilter filter)接口类型
  4. 传递FileFilter接口实现类,因为它并没有实现类,因此需要自定义FileFilter接口的实现类,重新抽象方法。
  5. 通过接口实现类对象传递到遍历方法listFiles

先是listFiles方法的代码:

package cn.hiluna.demo;

import java.io.File;

/**
 * File类的获取,文件获取的过滤器
 * 遍历一个目录的时候,可以根据需求,只获取满足条件的文件
 * 遍历目录方法listFiles()重载形式
 * listFiles(FileFilter filter)接口类型
 * 传递FileFilter接口实现类
 * 并没有实现类,所以需要自定义FileFilter接口的实现类,重写抽象方法,
 * 接口实现类对象传递到遍历方法listFiles
 */
public class FileDemo06 {
    public static void main(String[] args) {
        File file = new File("E:day22_video");
        File[] fileArr = file.listFiles(new MyFilter());
        for (File f : fileArr){
            System.out.println(f);
        }
    }
}

接口FileFilter的代码:

package cn.hiluna.demo;

import java.io.File;
import java.io.FileFilter;

/**
 * 自定义过滤器
 * 实现FileFilter接口,重写抽象方法
 */
public class MyFilter implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        /**
         * pathname接受到的也是文件全路径
         * 对路径进行判断,如果是txt文件,返回ture,如果不是,返回false
         * 文件的后缀结尾是.txt
         */
        //pathname.getName();获取文件名
        //.endsWith(".txt");判断字符串的结尾是啥,如果是返回true,不是返回false
        return pathname.getName().endsWith(".txt");

    }
}

思考流程图:

%title插图%num

  1. listFiles获取到文件路径。
  2. listFiles将文件路径传递到接口实现类中,由accept(File pathname)方法中pathname接受
  3. 文件路径在accept(File pathname)方法中进行判断,如果返回true,文件路径就会被添加到File[]数组中,如果返回false则不会被添加。

递归遍历目录

即遍历一个目录所有文件,及其子目录的所有文件。

思维导图:

%title插图%num

代码演示:

package cn.hiluna.demo;

import java.io.File;


/**
 * 对一个目录下的所有内容,进行完全遍历
 * 编程技巧,方法的递归调用,方法自己调用自己。
 */
public class FileDemo07 {
    public static void main(String[] args) {
        File dir = new File("E:CLion 2018.2.2");
        getAllDir(dir);
    }
    /**
     * 定义方法,实现目录的全遍历
     */
    public static void getAllDir(File dir){
        System.out.println(dir);
        //调用方法listFiles()对目录dir进行一个遍历
        File[] files = dir.listFiles();
        for (File f : files){
            //判断变量f表示的路径是不是文件夹
            if (f.isDirectory()){
                //是一个目录,就要去遍历这个目录
                //本方法,getAllDir,就是给个目录去遍历
                //继续调用getAllDir,传递目录
                getAllDir(f);
            }else {
                System.out.println(f);
            }
        }
    }
}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇