基础IO之File文件操作

1. File类使用-准备

  • java.io.File 类是一个普通的类,如果要实例化对象,则常用到两个构造方法
方法解释
public File(String pathname)创建指定路径文件对象
public File(String parent, String child)同上,但可指明父路径和子路径

为了方便表述,我们先做两方面准备:

  1. 创建 FileDemo.java , 方便测试,
  2. 指定并创建文件测试 路径为 E:\java_code\file
public class FileDemo {  
  public static void main(String[] args){    
      //注意后的\\,拼接,不是必须的,仅仅为了让同学们理解路径的构成 文件路径+文件名    
      String path = "E:\\java_code\\file\\";           
      String name = "demo.txt";    
      String pathname = path + name;  
     }
 }

2.File类常用方法-基本文件操作

方法说明
public boolean exists()测试指定路径中文件或者目录是否存在
public boolean isDirectory()判定一个文件是目录
public boolean isFile()判定是否是文件
public boolean delete()删除文件
public boolean createNewFile() throwsIOException创建一个新文件

范例1: 检测文件是否存在

import java.io.File;
public class FileDemo {  
  public static void main(String[] args){             
   String path = "E:\\java_code\\file\\";   
   String name = "demo.txt";    
   String pathname = path + name;
   File file = new File(pathname);   
   boolean res = file.exists();
   System.out.println("文件" + pathname + "是否存在: " + res);   
   }
 } 

结果:

文件E:\java_code\file\demo.txt是否存在: true

为了方便测试,在 E:\java_code\file 下手动创建 demo.txt

范例2: 检测是否是目录,是否是文件,删除

import java.io.File;
public class FileDemo {  
  public static void main(String[] args){
    String path = "E:\\java_code\\file\\";        
    String name = "demo.txt";    
    String pathname = path + name;
    File file = new File(pathname);
    boolean res = file.exists();        
    System.out.println("文件" + pathname + "是否存在: " + res);
    res = file.isDirectory();        
    System.out.println("文件" + pathname + "是否是目录: " + res);
    res = file.isFile();        
    System.out.println("文件" + pathname + "是否是文件: " + res);
    file.delete();     
    if(!file.exists()){            
    System.out.println("删除文件成功!");    
        }else{      
       System.out.println("删除文件失败!");    
           }  
      }
 }

结果

文件E:\java_code\file\demo.txt是否存在: true
文件E:\java_code\file\demo.txt是否是目录: false
文件E:\java_code\file\demo.txt是否是文件: true 删除文件成功!

再去 E:\java_code\file 路径下去看,发现文件已经不存在

范例3:创建新文件

import java.io.File;
import java.io.IOException;
public class FileDemo {  
  public static void main(String[] args) throws IOException {     
     String path = "E:\\java_code\\file\\";        
     String new_name = "demo1.txt";    
     String pathname = path + new_name;
     File file = new File(pathname);    
     if(!file.exists()){ //注意'!', 表示取反               
          try {      
               //有创建失败的风险,需要捕捉异常,异常如果不了解,可以先使用,不必关心细节                
               file.createNewFile();
                  }catch (IOException e){ //文件部分异常,常见为IOException                
                  System.out.println("文件" + pathname + "创建失败");                
                  //e.printStackTrace();            
              }    
      } else{            
     System.out.println("文件" + pathname + "已经存在,不需创建");     
   }   
 }
}

结果: E:\java_code\file 路径下,新增指定 dome1.txt 文件。可以再次运行,就会看到已经存在的 提示

文件E:\java_code\file\demo1.txt已经存在,不需创建

其中 File 类只是创建文件本身,但是对于其内容并不做处理。

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

import java.io.File;
import java.io.IOException;
public class FileDemo {  
  public static void main(String[] args) throws IOException {    
      String path = "E:\\java_code\\file\\";        
      String new_name = "demo.txt";    
      String pathname = path + new_name;
      File file = new File(pathname);        
      if(file.exists()){       
           //文件存在,删除      
            file.delete();            
            System.out.println("文件" + pathname + "存在,删除之");    
            }else{      
              //文件不存在,创建      
              try {                
                  file.createNewFile(); 
                //有创建失败的风险,需要捕捉异常                
                System.out.println("文件" + pathname + "不存在,创建之");     
                     }catch (IOException e){ 
                     //文件部分异常,常见为IOException                
                     System.out.println("文件" + pathname + "创建失败");                
                     e.printStackTrace();            
                     }     
                 }  
         } 
 } 

以上实现了最简化的文件处理操作,但是代码存在两个问题:

实际项目部署环境可能与开发环境不同。那么这个时候路径分隔符是一个很重要的问题。 windows 下使用的是 \ ,而 Unix/Linux 系统下使用的是 / 。所以在使用路径分隔符时都会 采用File类的一个常量 public static final String separator 来描述。

3. File类常用方法-目录操作

方法解释
public boolean mkdir()创建一个空目录
public boolean mkdirs()创建目录(无论有多少级父目录,都会创建)
public String getParent()取得父路径
public File getParentFile()取得父File对象

示例1: 创建指定一个或者多个目录的路

import java.io.File; 
import java.io.IOException;
public class FileDemo {  
  public static void main(String[] args) throws IOException {    
      String path = "E:\\java_code\\file\\";        
      String dir_name = "demo_dir"; //想要创建的目录        
      //String dir_name = "demo_dir\\dir1\\dir2\\dir3"; //想要创建的目录路径        
      String pathname = path + dir_name;
      File file = new File(pathname);    
          if(!file.exists()){            
            file.mkdir(); //创建一个空目录             
            //file.mkdirs(); //创建一个可能具有多个目录的路径    
               }else{            
                  System.out.println("路径已经存在,不需创建");     
                     }  
         } 
} 

结果: E:\java_code\file 路径下,观察路径变化

示例2: 获取父路径

import java.io.File; 
import java.io.IOException;
public class FileDemo {  
  public static void main(String[] args) throws IOException {    
      String path = "E:\\java_code\\file\\";        
      String dir_name = "demo_dir\\dir1\\dir2\\dir3";    
     String pathname = path + dir_name;
     File file = new File(pathname);        
     System.out.println(file.getParent());  
       } 
}

结果:

E:\java_code\file\demo_dir\dir1\dir2

示例3: 获取父目录 File 对象,并在父目录下,创建文件 demo.jav

import java.io.File; 
import java.io.IOException;
public class FileDemo {  
  public static void main(String[] args) throws IOException {    
      String path = "E:\\java_code\\file\\";        
      String dir_name = "demo_dir\\dir1\\dir2\\demo.java";    
      String pathname = path + dir_name;    
      File file = new File(pathname);
      File pfile = file.getParentFile(); //获取父目录File对象    
       if(!pfile.exists()){//检测路径是否存在,不存在创建            
            pfile.mkdirs();      
          //获取File对象的绝对路径,后面学,这个先用起来            
          System.out.println("路径" + pfile.getAbsolutePath() + "不存在,创建");    
              }    
      if(!file.exists()){           
        file.createNewFile();    
            }    
      }
 }

结果:

路径E:\java_code\file\demo_dir\dir1\dir2不存在,创建

以上判断父目录是否存在以及父目录的创建操作非常重要,对于后续开发很重要。

4.File类常用方法-文件属性操作

方法解释
public long length()取得文件大小(字节)
public long lastModified()最后一次修改日期

示例: 取得文件信息

import java.io.File; 
import java.io.IOException; 
import java.util.Date;
public class FileDemo {  
  public static void main(String[] args) throws IOException {    
      String path = "E:\\java_code\\file\\";        
      String name = "demo.txt";//可以替换成你想检测的文件    
      String pathname = path + name;     
      File file = new File(pathname);    
        if(!file.exists()){            
            file.createNewFile();   
                 }    
            System.out.println("文件 " + name + "size : " + file.length());    
            //Date类我们后面学        
             System.out.println("文件 " + name + "近修改时间: " +  new Date(file.lastModified()));  
         } 
}

结果:

文件 demo.txtsize : 3 文件 demo.txt近修改时间: Sun Aug 11 15:50:47 CST 2019

5. 绝对路径与相对路径

绝对路径:

是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。完整的描述文件位置的路径就 是绝对路径 。如: E:\javacode\Java8\Test.java 。通常:http://www.sun.com/index.htm也 代表了一个URL绝对路径。

当前目录:

这个参数还可以使用一些常用的路径表示方法,例如 ”.” 或 ”./” 代表当前目录,这个目录也就是 jvm 启动 路径 .所以如下代码能得到当前 .java 文件的当前目录的完整路径:(注意:这个目录也是当前 idea 中的 JVM 的启动路径,我们可以修改这个路径:在 Run->edit Configurations->Working directory 可 以看到)

 File f = new File(".");
 String absolutePath = f.getAbsolutePath(); 
 System.out.println(absolutePath); 

E:\javacode\Java8. 注意这个点号。

相对路径:
相对与某个基准目录的路径 。使用相对路径可以为我们带来非常多的便利 。如当前路径为 E:\javacode ,要描述上述路径( E:\javacode\Java8\Test.java ),只需输 入: Java8\Test.java 。此时的路径是相对 E:\javacode 来说的。
我们可以使用相对路径来创建文件,例如:

File file = new File("a.txt"); 
File.createNewFile(); 

此时生成的文件就在你当前目录下面。假设当前的路径为: E:\javacode\Java8

6. File类常用方法-其他操作

方法解释
public File[] listFiles()列出一个目录指定的全部组成

示例:列出desktop目录中的全部组成

import java.io.File; 
import java.io.IOException; 
import java.util.Date;
public class FileDemo {  
  public static void main(String[] args) throws IOException {    
      // 要操作的文件    
      File file = new File("C:\\Users\\whb\\Desktop");    
    // 保证是个目录且存在   
     if (file.exists() && file.isDirectory()) {            
     // 列出目录中的全部内容      
        File[] result = file.listFiles();            
        for (File file2 : result) {                
              System.out.println(file2);        
        }    
      }  
    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值