zoukankan      html  css  js  c++  java
  • JavaIO——File类

    1、File文件类

    File类(描述具体文件或文件夹的类):是唯一一个与文件本身操作有关的程序类,可完成文件的创建、删除、取得文件信息等操作。但不能对文件的内容进行修改。

    (1)File类的基本使用

    File类只用于创建文件文身并不对其内容做任何处理。

    Java.Io.File是一个普通的类,直接产生实例化对象,要想得到实例化对象则需用到其提供的构造方法。

    A. File类中提供的构造方法

     public File(String pathname)其中pathname位要传入对象的绝对路径。

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

    B. File类中的普通方法

    判断文件是否存在:public boolean exists()

    创建文件:public boolean createNewFile()

    删除文件:public boolean delete()

    1. package myIO;
    2. import java.io.File;
    3. import java.io.IOException;
    4. public class Test {
    5. public static void main(String[] args) {
    6. //定义要操作文件的路径
    7. File file = new File("C:\Users\lenovo\Desktop\TestIo.java");
    8. //查找指定文件是否存在(不存在返回false,反之亦然)
    9. System.out.println(file.exists());
    10. try {
    11. //若指定文件不存在,则创建新文件
    12. file.createNewFile();
    13. //创建文件后打印文件是否存在
    14. System.out.println(file.exists());
    15. } catch (IOException e) {
    16. e.printStackTrace();
    17. }
    18. //对文件进行删除
    19. file.delete();
    20. //进行删除操作后打印文件是否存在
    21. System.out.println("执行删除操作后文件存在与否?");
    22. System.out.println(file.exists());
    23. }
    24. }

                       

    1. /*
    2. * 实现程序:文件不存在则创建,存在则删除
    3. * */
    4. public class Test{
    5. public static void main(String[] args) throws IOException {
    6. File file = new File("C:\\Users\\lenovo\\Desktop\\TestIo.java");
    7. if(!file.exists()) {
    8. file.createNewFile();
    9. }else {
    10. file.delete();
    11. }
    12. }
    13. }

                   

    上述方法应该是最简化的文件处理操作了,但是仍然存在问题:如Linux下文件路径的分隔符用“/”,而在windows下则用的是“”;但是即便这样也不影响跨平台性,我们可以引入File类的一个常量"public static nal String separator "来对其描述。

    1. public class Test{
    2. public static void main(String[] args) throws IOException {
    3. //利用File类的常量来设置不同操作系统下的分隔符
    4. //separator由不同操作系统下的JVM来决定到底是"/"还是""
    5. String singal = File.separator;
    6. File file = new File("C"+singal+"Users"+singal+"lenovo"
    7. +singal+"Desktop"+singal+"TestIO.java");
    8. System.out.println(file.exists());
    9. if(file.exists()) {
    10. file.createNewFile();
    11. }else {
    12. file.delete();
    13. }
    14. }
    15. }

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

    (2)目录操作

         取得父路径:public String getParent() 返回当前的父路径

         取得父File对象:public File getParentFile() 返回当前的父File对象

         创建父目录: public boolean mkdirs() 有多少级就创建多少级 



    1. public class Test{
    2. public static void main(String[] args) throws IOException {
    3. String singal = File.separator;
    4. File file = new File("G:"+singal+"lemon"+singal+"javaIO"
    5. +singal+"TestIO.java");
    6. if(!file.getParentFile().exists()) {
    7. file.mkdirs();
    8. }
    9. }
    10. }

                                                   

    若使用file.mkdirs()创建,则创建的为文件夹。而若使用filegetParentFile.mkdirs()创建时则为目录。


    1. public class Test{
    2. public static void main(String[] args) throws IOException {
    3. String singal = File.separator;
    4. File file = new File("G:"+singal+"lemon"+singal+"javaIO"
    5. +singal+"TestIO.java");
    6. //判断父目录是否存在
    7. if(!file.getParentFile().exists()) {
    8. file.getParentFile().mkdirs();
    9. }
    10. }
    11. }

     

    1. public class Test{
    2. public static void main(String[] args) throws IOException {
    3. String singal = File.separator;
    4. File file = new File("G:"+singal+"lemon"+singal+"javaIO"
    5. +singal+"TestIO.java");
    6. //返回当前的父路径
    7. System.out.println("返回当前的父路径");
    8. System.out.println(file.getParent());
    9. //返回当前父File对象
    10. System.out.println("返回当前父File");
    11. System.out.println(file.getParentFile());
    12. //判断父目录是否存在
    13. if(!file.getParentFile().exists()) {
    14. //创建多级目录
    15. file.getParentFile().mkdirs();
    16. }
    17. //若文件存在则删除
    18. if(file.exists()) {
    19. file.delete();
    20. }else {
    21. //文件不存在,则创建新文件
    22. file.createNewFile();
    23. }
    24. }

                               

       

    ()取得文件信息

             判断路径是否是文件: public boolean isFile()

    判断路径是否是目录: public boolean isDirectory()

    取得文件大小(字节):  public long length()

    最后一次修改日期 : public long lastModied()


    1. /*
    2. * 取得文件信息
    3. * */
    4. public class Test{
    5. public static void main(String[] args) {
    6. String singal = File.separator;
    7. File file = new File("G:"+singal+"lemon"+singal+"javaIO"
    8. +singal+"TestIO.java");
    9. //判断上级目录是否为文件
    10. System.out.println("上级目录是否为文件?");
    11. System.out.println(file.getParentFile().isFile());
    12. //判断当前目录是否为文件
    13. System.out.println("该目录下是否为文件?");
    14. System.out.println(file.isFile());
    15. //查看当前对象是否为路径
    16. System.out.println("当前对象为路径?");
    17. System.out.println(file.isDirectory());
    18. //取得文件的大小
    19. System.out.println("当前文件的大小为:");
    20. long length = file.length();
    21. System.out.println(length);
    22. //取得文件的最后修改日期
    23. System.out.println("当前文件的最后修改日期为:");
    24. long date = file.lastModified();
    25. System.out.println(date);
    26. }
    27. }

                          

    取得本地文件的相关信息:


    1. /*
    2. * 列出当前目录下所有的文件
    3. * */
    4. public class Test{
    5. public static void main(String[] args) {
    6. String singal = File.separator;
    7. //要操作的文件
    8. File file = new File("C:"+singal+"Users"+singal+"lenovo");
    9. //保证是目录且存在
    10. if(file.exists()&&file.isDirectory()) {
    11. File[] result = file.listFiles();
    12. for (File file2 : result) {
    13. System.out.println(file2);
    14. }
    15. }
    16. }
    17. }

                           

    我们不难发现根据File类提供的listFiles可以取得本地文件的信息,但是这样只能取得第一级目录下的相关信息。若我们想要取得所有级的信息,则需要我们自己进行递归操作处理。


    1. /*
    2. * 打印当前目录下所有层级的文件信息
    3. * */
    4. public class Test{
    5. public static void main(String[] args) {
    6. String singal = File.separator;
    7. //要操作的文件
    8. File file = new File("D:"+singal+"Users"+singal+"lenovo");
    9. listAllFileInfor(file);
    10. }
    11. public static void listAllFileInfor(File file) {
    12. if(file.isDirectory()) {
    13. //file对象是目录,列出子目录的信息
    14. File[] files = file.listFiles();
    15. for (File file2 : files) {
    16. //进行递归,
    17. listAllFileInfor(file2);
    18. }
    19. }else {
    20. //当前操作的不是目录
    21. System.out.println(file);
    22. }
    23. }
    24. }

          

    现在所有的代码都在main线程中执行,可以发现只有当listAllFileInfor没有执行完,main的后续操作也无法完成。正是因为这种耗时操作使得主线程出现了阻塞,而导致后续代码无法直接正常执行完毕。若不想让其别阻塞,我们需要重新起一个线程来对其进行操作。


    1. /*
    2. * 解决阻塞main线程,另起线程
    3. * */
    4. public class Test{
    5. public static void main(String[] args) {
    6. new Thread(()->{
    7. String singal = File.separator;
    8. //要操作的文件
    9. File file = new File("G:"+singal+"lenmon");
    10. listAllFileInfor(file);
    11. },"输出线程").start();
    12. System.out.println("main执行完毕");
    13. }
    14. public static void listAllFileInfor(File file) {
    15. if(file.isDirectory()) {
    16. //file对象是目录,列出子目录的信息
    17. File[] files = file.listFiles();
    18. for (File file2 : files) {
    19. //进行递归,
    20. listAllFileInfor(file2);
    21. }
    22. }else {
    23. //当前操作的不是目录
    24. System.out.println(file);
    25. }
    26. }
    27. }
                             
  • 相关阅读:
    小项目-购物网站个别功能的具体实现思路-中(新手)
    小项目-购物网站个别功能的具体实现思路-上(新手)
    性能测试需具备的知识点
    二.re库介绍
    一.正则表达式
    十六.MySQL存储过程
    十五.自定义函数
    十四.运算符和函数
    十三.无限极分类表设计--自身连接
    十二.连接的语法结构
  • 原文地址:https://www.cnblogs.com/edda/p/12598462.html
Copyright © 2011-2022 走看看