JAVA I/O(File文件操作类)

如果要学好IO,必须清楚抽象类;IO的操作部分重点掌握两个代码模型。IO的核心组成就是五个类(File、OutputStream、InputStream、Reader、Writer)一个接口(Serializable)。
科普:
1.Windows:文件名是不区分大小写的;;
2.Linux:文件名是区分大小写;/

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

File类的使用
Java.io类是一个普通的类,直接产生实例化对象即可。如果要实例化对象则需要使用到两个构造方法:

  • public File(String pathname) ;

  • public File(String parent, String child),设置父路径和子路径

如果要想进行文件的基本操作,可以使用File类的如下方法:
创建一个新文件

public boolean createNewFile() throws IOException

判断文件是否存在

public boolean exists()

删除文件

public boolean delete()

编写文件的基本操作(如果文件不存在则进行创建;存在则删除):

package www.bittech.java;
import java.io.File;
import java.io.IOException;
public class Test{
    public static void main(String[] args) {
        File file = new File("/Users/yuisama/Desktop/TestIO.java");
        if (file.exists()) {
// 文件存在,进行删除
            file.delete() ;
        }else {
            try {
                file.createNewFile() ;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在Java中要进行文件的处理操作是要通过本地操作系统支持的,在这之中如果操作的是同名文件,就可能出现延迟的问题。(开发之中尽可能避免文件重名问题)

目录操作
取得父路径或父File对象:

public String getParent()


public File getParentFile()

创建目录(无论有多少级父目录,都会创建)

public boolean mkdirs()

文件信息
在File类里面提供有一系列取得文件信息的操作:

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

取得文件信息:

package www.bittech.java;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class Test {
    public static void main(String[] args) throws IOException {
// 要操作的文件
        File file = new File("D:"+File.separator+"123");
// 保证文件存在再进行操作
        if (file.exists() && file.isFile()) {
            System.out.println("文件大小:" + file.length());
            System.out.println("最后一次修改日期: " + new Date(file.lastModified()));
        }
    }
}

列出目录中的全部目录:

package www.bittech.java;
import java.io.File;
import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
// 要操作的文件
        File file = new File(File.separator + "Users" + File.separator + "yuisama" +
                File.separator + "Desktop");
// 保证是个目录且存在
        if (file.exists() && file.isDirectory()) {
// 列出目录中的全部内容
            File[] result = file.listFiles();
            for (File file2 : result) {
                System.out.println(file2);
            }
        }
    }
}

如果要求列出目录中所有级的信息,必须自己来处理。这种操作就必须通过递归的模式来完成。
递归打印当前目录下所有层级的文件信息:

package www.bittech.java;
import java.io.File;
public class Test {
    public static void main(String[] args) {
        File file = new File(File.separator + "Users" + File.separator + "yuisama" +
                File.separator + "Desktop") ;
        listAllFiles(file) ; // 从此处开始递归
    }
    /**this methods is used for 列出指定目录中的全部子目录信息 yuisama 2017年11月27日
     
     // @param file
     
    public static void listAllFiles(File file) {
        if (file.isDirectory()) { // 现在给定的file对象属于目录
            File[] result = file.listFiles() ; // 继续列出子目录内容
            if (result != null) {
                for (File file2 : result) {
                    listAllFiles(file2) ;
                }
            }
        }else {
// 给定的file是文件,直接打印
            System.out.println(file) ;
        }
    }
}

线程阻塞问题:
现在所有代码都是在main线程下完成的,如果listAllFiles()方法没有完成,那么对于main后续的执行将无法完成。这种耗时的操作让主线程出现了阻塞,而导致后续代码无法正常执行完毕。如果不想让阻塞产生,最好再产生一个新的线程进行处理。

新增子线程进行耗时操作:

package www.bittech.java;

import java.io.File;
public class Test{
    public static void main(String[] args) {
// 开启子线程进行列出处理
        new Thread(()->{
            File file = new File(File.separator + "Users" + File.separator + "yuisama"
                    + File.separator + "Desktop") ;
            listAllFiles(file) ; // 从此处开始递归
        },"输出线程").start();
        System.out.println("开始进行文件输出...");
    }
    /** this methods is used for 列出指定目录中的全部子目录信息 yuisama 2017年11月27日
     
     // @param file

    public static void listAllFiles(File file) {
        if (file.isDirectory()) { // 现在给定的file对象属于目录
            File[] result = file.listFiles() ; // 继续列出子目录内容
            if (result != null) {
                for (File file2 : result) {
                    listAllFiles(file2) ;
                }
            }
        }else {
// 给定的file是文件,直接打印
            System.out.println(file) ;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_44149554/article/details/89540611
今日推荐