Java——I/O(File类和Path类)

1. File文件操作类

在Java.io包之中,File类是唯一一个与文件本身操作(创建、删除、取得信息...)有关,与文件内容无关的程序类。

  • 1.1File类的基本使用

  • File类即可描述真实文件,也可以是个文件夹
  • File类的两种实例化方式:
//绝对路径
public File(String pathname) ; 
//重载,设置父路径和子路径
public File(String parent, String child)
  • 创建新文件
public boolean createNewFile() throws IOException
  • 判断文件是否存在
public boolean exists()
  •  删除文件
public boolean delete()

代码示例:

package com.qqycc;

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

/**
 * Author: qqy
 */
public class Test1 {
    public static void main(String[] args) {
        //取得File对象
        //E:\\help.txt
        File file=new File("E:"+File.separator+"help.txt");
        //判断文件是否存在
            if (file.exists()) {
                if (file.delete()){
                    System.out.println("文件存在,删除成功");
                }else{
                    System.out.println("文件存在,删除失败");
                }
            }else{
                try{
                    // //file.createNewFile()返回值是boolean类型
                    //File类只是创建文件本身,但是对于其内容并不做处理
                    if(file.createNewFile()){
                        System.out.println("文件不存在,创建成功");
                    }else{
                        System.out.println("文件不存在,创建失败");
                    }
                }catch (IOException e){
                    System.out.println(e.getMessage());
                }
            }
    }
}
  • 文件路径分隔符:windows \   linux /   unix /    代码跨平台,用File.separator代替具体的分隔符

  • 路径分隔符:windows ;   linux :   unix :    代码跨平台,用File.pathSeparator代替具体的分隔符

  • 文件名大小写,在windows下注意区分:windows 不区分   linux、unix 区分  

     HELLO.txt 和 hello.txt  在windows下,为同一个文件;在 linux、unix下,是不同的文件

  • 1.2 目录操作

  • 取得父路径和父File对象
public String getParent()

public File getParentFile()
  • 创建目录
//创建目录以及上级目录(如果上级目录不存在)
public boolean mkdirs()
//只创建当前目录
public boolean mkdir()

代码示例:

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

/**
 * 目录操作
 * Author: qqy
 */
public class Test {
    public static void main(String[] args) {
        File file = new File("E:" + File.separator + "a" + File.separator + "help.txt");
        if (!file.exists()) {
            File parentFile = file.getParentFile();
            if (!parentFile.exists()) {
                if (parentFile.mkdirs()) {
                    System.out.println("创建目录成功");
                }
            }
            try {
                if (file.createNewFile()) {
                    System.out.println("创建文件成功");
                } else {
                    System.out.println("创建文件失败");
                }
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }
    }
}
  • 1.3 文件信息

  • 判断路径是否是文件
public boolean isFile() 
  • 判断路径是否是目录
public boolean isDirectory() 
  • 取得文件大小(字节)
public long length() 
  • 最后一次修改日期 
public long lastModified()

代码示例:

import java.io.File;
import java.util.Date;

/**
 * Author: qqy
 */
public class Test4 {
    public static void main(String[] args) {
        File file = new File("E:" + File.separator + "JAVA" + File.separator + "JavaSE");
        System.out.println("文件是否是目录:"+file.isDirectory());
        System.out.println("文件是否是普通文件:"+file.isFile());
        //通过文件调用,不能获取目录的大小
        System.out.println("文件大小:"+file.length());
        System.out.println("文件最后修改时间:"+new Date(file.lastModified()));
    }
}
  • 列出目录中的全部组成
//file是普通文件返回null,如果是目录则返回目录下的所有文件以及文件夹
File[] files=file.listFiles();
//返回路径
String[] fileName=file.list();

代码示例:

import java.io.File;

/**
 * 列出目录中的全部组成
 * Author: qqy
 */
public class Test5 {
    public static void main(String[] args) {
        File file = new File("E:" + File.separator + "JAVA" + File.separator + "JavaSE");
        File[] files=file.listFiles();
        String[] fileName=file.list();
        //if(file.exists()&&file.isDirectory())
        if(files!=null) {
            for (File f : files) {
                System.out.println(f.getName());
                System.out.println(f.getAbsolutePath());
            }
        }
    }
}
  • 1.4 综合案例

代码示例:

import java.io.File;

/**
 * 综合案例
 * Author: qqy
 */
public class Test6 {
    public static void main(String[] args) {
        File file = new File("E:" + File.separator + "JAVA" + File.separator + "JavaSE");
        new Thread(new Runnable() {
            @Override
            public void run() {
                findFile(file, 0);
            }
        }).start();
        System.out.println("hello");
    }

    //通过递归方式遍历指定文件目录下的所有文件及子目录
    public static void findFile(File file, int level) {
        if (file.isFile()) {
            System.out.println("|" + repeatSpace(level) + "|-" + file.getName());
        } else {
            System.out.println(repeatSpace(level) + "+" + file.getName());
            File[] files = file.listFiles();
            if (files != null) {
                for (File f : files) {
                    findFile(f, level + 2);
                }
            }
        }
    }

    public static String repeatSpace(int count) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= count; i++) {
            sb.append(" ");
        }
        return sb.toString();
    }
}

练习:

import java.io.File;
import java.util.Date;

/**
 * Author: qqy
 */
public class Exercise {
    public static void main(String[] args) {
        File file = new File("E:" + File.separator + "JAVA" + File.separator + "课件");
        print(file);
        tree(file);
    }

    //1.	传入一个文件File
    //2.	打印输出如下内容
    //3.	 每一个文件一行
    //4.	 F|D name size last_modified
    public static void print(File f){
        if(f==null){
            return;
        }
        System.out.println((f.isFile()?"F":"D")+"    "+f.getName()+"    "+f.length()+"    "+new Date(f.lastModified()));
        File[] files=f.listFiles();
        if(files!=null){
            //1.for
            for(int i=0;i<files.length;i++){
                File item=files[i];
                System.out.println((item.isFile()?"F":"D")+"    "+item.getName()+"    "+item.length()+"    "+new Date(item.lastModified()));
            }
            //2.foreach
            for(File item:files){
                System.out.println((item.isFile()?"F":"D")+"    "+item.getName()+"    "+item.length()+"    "+new Date(item.lastModified()));
            }

        }


    }

    //1.	递归遍历文件
    //2.	输入格式:tree 目录
    public static void tree(File f){
        if(f==null){
            return;
        }
        if(f.isFile()){
            System.out.println(f.getName());
        }else {
            File[] files = f.listFiles();
            if (files != null) {
                for (File item : files) {
                    tree(item);
                }
            }
        }
    }
}

2.Path类

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * Author: qqy
 */
public class Test {
    public static void main(String[] args) {
        //Path是接口,无法实例化对象,借助辅助类Paths来实现
        //E:\JAVA
        Path path=Paths.get("E","JAVA");
        //E:\JAVA\code
        Path path1=Paths.get("E","help");
        //E:
        Path path2=Paths.get("E");
        //将Path对象转换为File对象
        File file=path.toFile();
        File file1=Paths.get("E").toFile();

        try {
            Files.deleteIfExists(path1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

猜你喜欢

转载自blog.csdn.net/qq_42142477/article/details/84779772