Java中的IO

File

//File.separator 为路径分隔符的常量,在以后使用路径是尽量使用File.separator
    File file = new File("D:"+File.separator+"demo"+File.separator+"demo.txt");
    if(file.exists()){
        System.out.println("文件已存在,实现【删除】操作"+file.delete());
    }else{
        System.out.println("文件不存在,实现【创建】操作"+file.createNewFile());
    }
}


问题:在使用File使用文件处理时,存在延迟。
文件目录操作
在很多情况下 有可能需要再子目录之中进行文件的创建,那么在java.io包中,必须保证有父目录的情况下才可以创建子文件。

File file = new File("D:"+File.separator+"demo"+File.separator+"hello"+File.separator+"demo.txt");

此时的操作路径里面追加了父目录定义,于是当前的程序代码在执行的时候就会产生错误

//程序执行结果:
Exception in thread "main" java.io.IOException: 系统找不到指定的路径。

因为必须在有父目录存在的情况下,才可以进行子文件的各种操作,创建或删除应该针对对于目录存在的情况下。
所以如果要进行目录的创建,则需要使用到File类中的如下几个方法
public boolean mkdir() :只创建单级目录
public boolean mkdirs() :创建多级目录
public String getParent():获取父路径的信息(String)
public File getParentFile():获取父路径的File实例

//父目录的创建  
 File file = new File("D:"+File.separator+"demo"+File.separator+"hello"+File.separator+"demo.txt");
    if(!file.getParentFile().exists()) {//父路径不存在
        file.getParentFile().mkdirs();//创建所有的父路径
    }
    if(file.exists()){
        System.out.println("文件已存在,实现【删除】操作"+file.delete());
    }else{
        System.out.println("文件不存在,实现【创建】操作"+file.createNewFile());
    }
}  

合理的父目录操作
在多线程环境下可以考虑使用静态代码块的模式来完成,静态代码块的执行优先于主方法的执行

public class Demo {
    private static File file = new                                                                                                                                                                                                                          File("D:"+File.separator+"demo"+File.separator+"hello"+File.separator+"demo.txt");
       static{ //只执行一次,在执行一次的时候进行判断和目录的创建
           if(!file.getParentFile().exists()) {//父路径不存在
               file.getParentFile().mkdirs();//创建所有的父路径
       }
    }
      public static void main(String[] args) throws Exception{
        //File.separator 为路径分隔符的常量,在以后使用路径是尽量使用File.separator
        if(file.exists()){
            System.out.println("文件已存在,实现【删除】操作"+file.delete());
        }else{
            System.out.println("文件不存在,实现【创建】操作"+file.createNewFile());
        }
    }
}              

获取文件信息
在File类中除了提供有基本的文件盒目录创建之外,也提供一些其他的操作信息,这些操作的方法如下:
public boolean canExecute():是否能执行
public boolean canRead():是否能读
public boolean canWrite():是否能写
public boolean isDirectory():当前路径是否为目录
public boolean isFile():当前路径是否为文件
public long lastModified():获取文件最后修改的日期
public long length():获取文件的大小
public String getName():获取文件的名字

public class Demo {
      public static v        oid main(String[] args) throws Exception{
          File file = new File("D:"+File.separator+"demo"+File.separator+"hello"+File.separator+"demo.txt");
          System.out.println("文件是否能执行"+file.canExecute());
          System.out.println("文件是否能读"+file.canRead());
          System.out.println("文件是否能写"+file.canWrite());
          System.out.println("文件的大小"+file.length());
          System.out.println("文件的名字"+file.getName());
          System.out.println("文件最后的修改日期"+new Date(file.lastModified()));
          System.out.println("当前路径是否为文件"+file.isFile());
          System.out.println("当前路径是否为目录"+file.isDirectory());
    }
}
/*运行结果:文件是否能执行true
文件是否能读true
文件是否能写true
文件的大小0
文件的名字demo.txt
文件最后的修改日期Wed Mar 10 18:16:29 CST 2021
当前路径是否为文件true
当前路径是否为目录false
*/ 

获取文件目录信息
使用File可以实现文件或者目录的操作,但是有时候可能会有一些子目录存在,现在要求可以将一个目录中的所有的子目录和文件全部列出,这个时候必须使用到File类中提供的一个重要方法:
public String[] list(FilenameFilter filter):描述的是子路径的信息(不包括父目录)
public File[] listFiles():列出所有的路径信息(File对象数组)

list()方法操作:

package IO.File;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
public class Demo {
      public static void main(String[] args) throws Exception{
          File file = new File("D:"+File.separator);
          System.out.println(Arrays.toString(file.list()));
    }
}      
/*运行结果:
[$RECYCLE.BIN, 2345Downloads, 360安全浏览器下载, 360极速浏览器下载, 5b45ae2f0e2262b7df4186a9fb92a537, 654645, 6wanDownload]
*/     

listFiles()方法如下:

package IO.File;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
public class Demo {
      public static void main(String[] args) throws Exception{
          File file = new File("D:"+File.separator);
          System.out.println(Arrays.toString(file.listFiles()));
    }
}
/*运行结果:
[D:\$RECYCLE.BIN, D:\2345Downloads, D:\360安全浏览器下载, D:\360极速浏览器下载, D:\5b45ae2f0e2262b7df4186a9fb92a537, D:\654645, D:\6wanDownload, D:\7457547]
*/

列出D盘所有文件路径:

package IO.File;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
public class Demo {
      public static void main(String[] args) throws Exception{
          File file = new File("D:"+File.separator);
          listdir(file);
    }
        public static void listdir(File file) throws Exception{
          if(file.isDirectory()) {
              File result[] = file.listFiles();
              if (result != null) {
                  for (int i = 0; i < result.length; i++) {
                      listdir(result[i]);
                  }
              } 
              System.out.println(file);
          }
        }
}
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值