[学习笔记]Java IO之文件

来源:互联网 发布:网络棋牌游戏平台源码 编辑:程序博客网 时间:2024/06/05 16:27

1. 概述

文件和目录路径名的抽象表现形式。

2. 特点

  • 可以将文件或文件目录封装成对象进行操作。
  • File类实例是常量,类似于String类。

3. 构造器

  • 通过parent目录对象下child子目录或者文件创建对象。
    File(File parent, String child)
  • 通过路径字符串创建对象。
    File(String pathname)
  • 通过parent目录下child子目录或文件创建对象。
    File(String parent, String child)

4. 常用方法

  • 判断是否存在
    boolean  exists()
  • 判断是否为绝对路径,目录,文件,隐藏
    boolean  isAbsolute()
    boolean  isDirectory()
    boolean  isFile()
    boolean  isHidden()
  • 创建文件目录
    boolean  mkdir()
    boolean  mkdirs()
  • 创建文件
    boolean  createNewFile()
    static File  createTempFile(String prefix, String suffix)
    static File  createTempFile(String prefix, String suffix, File directory)
  • 删除
    boolean  delete()
  • 罗列文件
    String[]  list()
    String[]  list(FilenameFilter filter)
    File[]  listFiles()
    File[]  listFiles(FileFilter filter)
    File[]  listFiles(FilenameFilter filter)
  • 获取文件属性
    long  lastModified()
    long  length()
  • 获得文件路径
    File  getAbsoluteFile()
    String  getAbsolutePath()
    String  getName()
    String  getParent()
    File  getParentFile()
    String  getPath()
  • 判断文件权限
    boolean  canExecute()
    boolean  canRead()
    boolean  canWrite()
  • 设置文件权限
    boolean  setExecutable(boolean executable)
    boolean  setExecutable(boolean executable, boolean ownerOnly)
    boolean  setReadable(boolean readable)
    boolean  setReadable(boolean readable, boolean ownerOnly)
    boolean  setReadOnly()
    boolean  setWritable(boolean writable)
    boolean  setWritable(boolean writable, boolean ownerOnly)
  • 设置文件最后修改时间
    boolean  setLastModified(long time)

5. 示例

package io;
 
import java.io.File;
import java.io.IOException;
 
public class FileDemo {
 
public static void main(String[] args) {
String path = "E:" + File.separator + "java" ;
File f1 = new File( path); // E:\java
File f2 = new File( path, "itheima.java"); // E:\java\itheima.java
// 创建文件,如果文件不存在,创建返回true;如果文件存在,则不创建返回false; 如果路径不存在或者错误,IOException。
File file = new File( "File.java");
try {
boolean createNewFile = file .createNewFile(); // createNewFile = true
} catch (IOException e) {
e.printStackTrace();
}
// 创建目录,如果目录不存在,创建返回true;如果目录存在,则不创建返回false
File dir = new File( "files" + File.separator + "java");
boolean mkdir = dir.mkdir(); // 只能创建单级目录, mkdir = false
boolean mkdirs = dir.mkdirs(); // 创建层级目录,mkdirs = false
// 判断存在,文件,目录
boolean isExists = file .exists(); // isExists = true
// 确保文件存在再判断是否为文件/目录
boolean isDirectory = file .isDirectory(); // isDirectory = false
boolean isFile = file .isFile(); // isFile = true
boolean isHiden = file .isHidden(); // isHiden = false
// 获取绝对路径
File absFile = file.getAbsoluteFile();
// E:\Documents\个人文档\My Programs\Java_itheima\File.java
String absPath = file.getAbsolutePath();
// E:\Documents\个人文档\My Programs\Java_itheima\File.java
// 获取File中封装的路径,文件名,长度,修改时间
path = file.getPath(); // File.java
String filename = file.getName(); // File.java
long size = file.length(); // 0
long time = file.lastModified(); // 1418843575174
// 删除目录和文件
if (file.exists()) {
boolean delete = file .delete(); // true
}
 
// 获取目录下的文件以及文件夹的名称
String[] names = dir.list();
for (String name : names) {
System.out.println( name);
}
 
// 获取目录下的文件以及文件夹对象。
File[] files = dir.listFiles();
for (File f : files) {
System.out.println( f.length());
}
// 只有将目录中的内容都删除后,保证该目录为空。这时这个目录才可以删除。
if (dir.exists()) {
boolean delete = file .delete(); // false
}
}
}

文件过滤器(FileFilter接口和FilenameFilter接口)

1. 概述

FileFilter接口和FilenameFilter接口类似Comparator比较器,可以为文件过滤提供帮助。

2. 特点

  • 文件过滤器可以为文件罗列方法提供参数,让其支持条件过滤。
  • FileFilter接口能够提供文件过滤条件,而FilenameFilter接口能够提供文件名过滤条件。
  • 可以使用匿名内部类方式为文件罗列提供参数。

3. 方法

  • FileFilter接口:
    boolean  accept(File pathname)
  • FilenameFilter接口:
    boolean  accept(File dir, String name) 

4. 示例

FileFilterBySuffix.java
package io.filter;
 
import java.io.File;
import java.io.FileFilter;
 
public class FileFilterBySuffix implements FileFilter {
 
private String suffix;
public FileFilterBySuffix(String suffix) {
super();
this.suffix = "." + suffix;
}
 
public boolean accept(File dir ) {
return dir.getName().endsWith( suffix);
}
 
}

FileList.java
package io;
 
import io.filter.FileFilterBySuffix;
 
import java.io.File;
import java.io.FileFilter;
 
public class FileList {
 
public static void main(String[] args) {
// 获取文件和文件夹
File dir = new File( "E:\\Documents");
// 健壮性判断:必须存在,必须目录,否则容易引发返回数组为null,出现NullPointerException
if (!(dir.exists() && dir.isDirectory())) {
return;
}
 
// 使用文件名过滤器来进行遍历
File[] files = dir.listFiles( new FileFilterBySuffix("pdf" ));
for (File file : files) {
System.out.println( file.getName());
}
 
// 使用文件过滤器来进行遍历
File[] dirs = dir.listFiles( new FileFilter() {
@Override
public boolean accept(File pathname ) {
return pathname .isDirectory();
}
});
for (File sdir : dirs) {
System.out.println( sdir.getName());
}
}
}

案例

层级遍历目录

package io;
 
import io.filter.FileFilterBySuffix;
 
import java.io.File;
import java.io.IOException;
 
import collection.structure.Queue;
 
public class FileIterator {
 
public static void main(String[] args) {
File dir = new File( "E:\\Documents\\个人文档\\My Programs\\Java_itheima");
// 列出指定目录下以及子目录下所有文件
listAllFiles(dir );
// 列出指定目录下以及子目录下所有指定文件
listAllJavaFiles(dir , new FileFilterBySuffix("java" ));
// 使用队列或堆栈,列出指定目录下以及子目录下所有文件
listAllFilesByStack(dir );
File deepPath = new File( dir, "!a\\b\\c");
deepPath.mkdirs();
File deepFile = new File( deepPath, "1.java");
try {
deepFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
// 删除指定目录(包括子目录和文件)
File path = new File( dir, "!a");
deletePath(path );
}
 
/**
* 列出指定目录下以及子目录下所有文件
* 使用队列
* 特点是广度优先搜索
* @param dir
*/
public static void listAllFilesByStack(File dir) {
Queue<File> queue = new Queue<File>();
queue.enQueue( dir);
while (! queue.isEmpty()) {
File[] files = queue.deQueue().listFiles();
for (File file : files) {
if ( file.isDirectory()) {
queue.enQueue( file);
} else {
System. out.println(file );
}
}
}
}
 
/**
* 删除指定目录(包括子目录和文件)
* 使用递归
* @param path
*/
public static void deletePath(File path) {
File[] files = path.listFiles();
for (File file : files) {
if (file.isDirectory()) {
deletePath(file );
} else {
System. out.println(file .delete());
}
}
System.out.println( path.delete());
}
 
/**
* 列出指定目录下以及子目录下所有指定扩展名文件
* 使用递归和文件过滤器
* @param dir
* @param ff
*/
public static void listAllJavaFiles(File dir, FileFilterBySuffix ff) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
listAllJavaFiles(file , ff );
} else if (ff.accept(file)) {
System. out.println(file );
} else {
continue;
}
}
}
 
/**
* 列出指定目录下以及子目录下所有文件
* 使用递归
* @param dir
*/
public static void listAllFiles(File dir) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
listAllFiles(file );
} else {
System. out.println(file );
}
}
}
}
0 0
原创粉丝点击