Java IO流之File分析

简介

文件和目录路径名的抽象表示方式.File类可以用于文件和目录的创建,文件查找和文件删除等.File类实现了Serializable和Comparable接口,可以进行序列化和文件大小的比较.

File介绍

1.构造方法

public File(String pathname) {}
public File(String parent, String child) {}
public File(File parent, String child) {}
public File(URI uri) {}
  • 根据指定路径名字符串转换成抽象路径名来创建File对象.
  • 根据parent路径名字符串和child路径名字符串来创建File对象.
  • 根据parent抽象路径名和child路径名字符串来创建File对象.
  • 根据给定的file:URI转成抽象路径名创建一个File对象.

2.内部变量

private static final FileSystem fs = DefaultFileSystem.getFileSystem();
private final String path;
private static enum PathStatus { INVALID, CHECKED };
private transient PathStatus status = null;
private final transient int prefixLength;
public static final char separatorChar
public static final String separator
public static final char pathSeparatorChar 
public static final String pathSeparator
  • fs----返回平台默认的文件系统对象.
  • path----路径名字符串.
  • PathStatus----表示的是文件路径的状态.
  • status----用来标识文件路径是否有效.
  • prefixLength----抽象路径名的前缀的长度.
  • separatorChar----系统依赖的默认名称分割符.在UNIX系统中是'/',在Microsoft Windows系统中是"//".
  • separator----系统依赖的默认名称分割符.在UNIX系统中是'/',在Microsoft Windows系统中是"//".
  • pathSeparatorChar----在UNIX系统中是':',在Microsoft Windows系统中是";".
  • pathSeparator----在UNIX系统中是':',在Microsoft Windows系统中是";".

3.内部方法

//返回此抽象路径名表示的文件或者目录的名称.
public String getName() {}
//返回此抽象路径名父目录的路径名字符串,如果此路径名没有指定父目录,返回null.
public String getParent() {}
//返回此抽象路径名父目录的抽象路径名,如果此路径名没有指定父目录,则返回 null.
public File getParentFile() {}
//将此抽象路径名转换为一个路径名字符串.
public String getPath() {}
//测试此抽象路径名是否为绝对路径名.
public boolean isAbsolute() {}
//返回抽象路径名的绝对路径名字符串.
public String getAbsolutePath() {}
//返回此抽象路径名的绝对路径名字符串.
public File getAbsoluteFile() {}
//返回此抽象路径名的规范路径名字符串.
public String getCanonicalPath() {}
//返回此抽象路径名的规范形式.
public File getCanonicalFile() {}
//构造一个表示此抽象路径名的file:URI.
public URI toURI() {}
//测试应用程序是否可读取此抽象路径名表示的文件.
public boolean canRead() {}
//测试应用程序是否可以修改此抽象路径名表示的文件.
public boolean canWrite() {}
//测试此抽象路径名表示的文件或目录是否存在.
public boolean exists() {}
//测试此抽象路径名表示的文件是否是一个目录.
public boolean isDirectory() {}
//测试此抽象路径名表示的文件是否是一个标准文件.
public boolean isFile() {}
//测试此抽象路径名指定的文件是否是一个隐藏文件.
public boolean isHidden() {}
//返回此抽象路径名表示的文件最后一次被修改的时间.
public long lastModified() {}
//返回由此抽象路径名表示的文件的长度
public long length() {}
//当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件.
public boolean createNewFile(){}
//删除此抽象路径名表示的文件或目录.
public boolean delete() {}
//在虚拟机终止时,请求删除此抽象路径名表示的文件或目录.
public void deleteOnExit() {}
//返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
public String[] list() {}
// 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录.
public String[] list(FilenameFilter filter){}
//返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件.
public File[] listFiles() {}
//返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录.
public File[] listFiles(FilenameFilter filter) {}
//返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录.
public File[] listFiles(FileFilter filter){}
//创建此抽象路径名指定的目录.
public boolean mkdir() {}
//创建此抽象路径名指定的目录,包括所有必需但不存在的父目录.
public boolean mkdirs() {}
//重新命名此抽象路径名表示的文件.
public boolean renameTo(File dest) {}
//设置此抽象路径名指定的文件或目录的最后一次修改时间.
public boolean setLastModified(long time) {}
//标记此抽象路径名指定的文件或目录,从而只能对其进行读操作.
public boolean setReadOnly() {}
//设置此抽象路径名的所有者或所有用户的写权限.
public boolean setWritable(boolean writable, boolean ownerOnly) {}
//设置此抽象路径名所有者写权限的一个便捷方法.
public boolean setWritable(boolean writable) {}
//设置此抽象路径名的所有者或所有用户的读权限.
public boolean setReadable(boolean readable, boolean ownerOnly) {}
//设置此抽象路径名所有者读权限的一个便捷方法.
public boolean setReadable(boolean readable) {}
//设置此抽象路径名的所有者或所有用户的执行权限.
public boolean setExecutable(boolean executable, boolean ownerOnly) {}
//设置此抽象路径名所有者执行权限的一个便捷方法.
public boolean setExecutable(boolean executable) {}
//设置此抽象路径名的所有者或所有用户的执行权限.
public boolean canExecute() {}
//列出可用的文件系统根.
public static File[] listRoots() {}
//返回此抽象路径名指定的分区大小.
public long getTotalSpace() {}
//返回此抽象路径名指定的分区中未分配的字节数.
public long getFreeSpace() {}
//返回此抽象路径名指定的分区上可用于此虚拟机的字节数.
public long getUsableSpace() {}
//在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称.
public static File createTempFile(String prefix, String suffix,File directory){}
//在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称.
public static File createTempFile(String prefix, String suffix){}
//按字母顺序比较两个抽象路径名.
public int compareTo(File pathname) {}
//返回抽象路径构建的Path对象.
public Path toPath() {}

File方法总结:

一.新建目录或者文件(方法mkDir(),方法mkdirs(),方法createNewFile())

1.方法mkdir():父级目录必须存在,即在已有目录下面创建目录,.mkdir()方法不能创建多级目录,比如:可以在已有目录D:/java下面创建home目录,不能创建home/jre多级目录.构造方法如下:

方式1:File file1= new File("D:/java/home");

方式2:File file2 = new File("D:/java","home");

方式3:URI uri = new URI("file:D:/java/home");(注意格式是"file:/D:/java/home")

          File file = new File(uri);

2.方法mkdirs() : 创建多级不存在的目录.比如:可以创建多级目录D:/java/home.即D盘下面java文件夹不存在.

方式1:File file1 = new File("D:/java/home");

方式2:File file2 = new File("D:/java","home");

方式3:File javaDir= new File("D:java");

          File file3 = new File(javaDir,"test.txt");

方式4:URI uri = new URI("file:/D:/java/home");(注意格式是"file:/D:/java/home")

          File file2 = new File(uri);

3.方法createNewFile() :创建已有目录下面的文件.比如:可以已存在目录D:/java目录下面创建test.txt,如java目录不存在,创建不了文件test.txt.

方式1:File java = new File("D:/java");   

          File file1 = new File(java,"test.txt");

方式2:File file2 = new File("D:/java","test.txt");

方式3:File file3 = new File("D:/java/test.txt");

方式4:URI uri = new URI("file:/D:/java/test.txt");(注意格式是"file:/D:/java/home")

          File file = new File(uri);

二.删除文件.

方法delete(),需要注意的是delete()方法不能直接删除非空文件夹,需要先删除所有目录下面所有文件.

File案例

public class FileDemo {
  public static void main(String[] args) throws IOException, URISyntaxException {
    //testCreateDirectory();
    //testCreateFile();
    //testOtherMethod();
    File file = new File("D:/java");
    //testAllFileDelete(file);
  }
  /**
   * 递归调用删除所有文件
   */
  private static void testAllFileDelete(File file) {
    if(file==null||!file.exists()) return;
    if(file.isDirectory()) {
      File[] listFiles = file.listFiles();
      for(File delFile :listFiles) {
        testAllFileDelete(delFile);
      }
    }
    file.delete(); 
  }
  private static void testOtherMethod() {
    File file = new File("D:/java/test.txt");
    System.out.println("文件是否存在file.exists-----"+file.exists());
    System.out.println("文件绝对路径file.getgetAbsolutePath()------"+file.getAbsolutePath());
    System.out.println("文件名file.getName()-----"+file.getName());
    System.out.println("file.getParentFile()------"+file.getParentFile());
    System.out.println("父级目录路径名file.getParent()-----"+file.getParent());
    System.out.println("uri的路径file.toURI()------"+file.toURI());
    System.out.println("最后修改时间file.getLastModified()-----"+file.lastModified());
    System.out.println("路径名转化成字符串file.getPath()-----"+file.getPath());
    File testFile = new File("D:/java");
    File[] listFiles = testFile.listFiles();
    for(File list : listFiles) {
      System.out.println("文件名:"+list.getName()+""+"----是否目录:"+list.isDirectory()+"----是否文件:"+list.isFile()+"-----绝对路径:"+list.getAbsolutePath());
    }
  }
  /**
   * 创建文件,前提是要在已有的目录下面
   */
  private static void testCreateFile() throws IOException, URISyntaxException {
    //******createNewFile()*********
    //在已有目录D:/java下面创建文件test.txt.
    File javaDir = new File("D:/java");//先创建D:/java目录.
    javaDir.mkdir();
    //方式1:
    File file1 = new File("D:/java/test.txt");
    file1.createNewFile();
    //方式2:
    File file2 = new File("D:/java","test.txt");
    file2.createNewFile();
    //方式3:
    File javaFile = new File("D:/java");
    File File3 = new File(javaFile,"test.txt");
    File3.createNewFile();
    //方式4:
    URI uri = new URI("file:/D:/java/home");
    File file4 = new File(uri);
    file4.createNewFile();
  }
  
  /**
   * 创建目录方法共两类:
   * 1.mkdir()方法,要求父级的目录必须是存在的
   * 2.mkdirs()方法,父级目录可以不存在
   */
  private static void testCreateDirectory() throws URISyntaxException {
    //*******mkdir()********
    //1.在已有D:/java目录下面创建home目录
    File javaDir = new File("D:/java");
    javaDir.mkdir(); //创建D:/java,使得D盘根目录下面java目录已存在.
    //方式1:
    File file1 = new File("D:/java/home");
    file1.mkdir();
    //方式2:
    File file2 = new File("D:/java","home");
    file2.mkdir();
    //方式3:
    URI uri = new URI("file:/D:/java/home");
    File file3 = new File(uri);
    file3.mkdir();
    
    //******mkDirs()********
    //2.父级别目录不存在,即D:/java目录不存在,创建多级目录,D:/java/home.
    //方式1:
    File dirsFile1 = new File("D:/java/home");
    dirsFile1.mkdirs();
    //方式2:
    File dirsFile2 = new File("D:/java","home");
    dirsFile2.mkdirs();
    //方式3:
    URI dirsUri = new URI("file:/D:/java/home");
    File dirsFile3 = new File(dirsUri);
    dirsFile3.mkdirs();
    //方法4:
    File javaDir1 = new File("D:/java");
    File file4 = new File(javaDir1,"home");
    file4.mkdirs();
  }
}

testOtherMethod方法运行结果:

文件是否存在file.exists-----true
文件绝对路径file.getgetAbsolutePath()------D:\java\test.txt
文件名file.getName()-----test.txt
file.getParentFile()------D:\java
父级目录路径名file.getParent()-----D:\java
uri的路径file.toURI()------file:/D:/java/test.txt
最后修改时间file.getLastModified()-----1536546025013
路径名转化成字符串file.getPath()-----D:\java\test.txt
文件名:test.txt----是否目录:false----是否文件:true-----绝对路径:D:\java\test.txt

猜你喜欢

转载自blog.csdn.net/lili13897741554/article/details/82500257