Java File类总结和FileUtils类
Java File类总结和FileUtils类
文件存在和类型判断
创建出File类的对象并不代表该路径下有此文件或目录。
用public boolean exists()可以判断文件是否存在。
File类的对象可以是目录或者文件。
如果是目录,public boolean isDirectory()返回true;
如果是文件(非目录则是文件),public boolean isFile()返回true;
但是注意需要先判断文件是否存在,如果文件不存在,上面两个方法都返回false,即不存在的File类对象既不是文件也不是目录。
创建文件
public boolean createNewFile()会创建一个新的空文件,只有该文件不存在的时候会创建,如果文件已经存在的话则返回false。
创建文件夹
public boolean mkdir()
创建目录,成功返回true。只能创建一个文件夹,要求所有的父目录都存在,否则创建失败。
public boolean mkdirs()
创建目录,成功返回true,会创建所有不存在的父目录。(注意即便最后创建失败,但是也可能创建了一些中间目录)。
上面两个方法如果要创建的目录已经存在,不再重新创建,都返回false,只有新建目录返回true。
目录操作
列出目录中的文件有以下方法可选:
String[] list()
String[] list(FilenameFilter filter)
返回文件名数组。
File[] listFiles()
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter filter)
返回File数组。
参数是文件或者文件名过滤器。
注意返回为空和返回为null的意义是不同的。
若不包含(符合条件的)文件,返回为空。
但是如果返回为null,则表明调用方法的File对象可能不是一个目录,或者发生了IO错误。
删除文件
boolean delete()方法会删除文件,如果File对象是文件则直接删除,对于目录来说,如果是空目录则直接删除,非空目录则无法删除,返回false。
如果要删除的文件不能被删除则会抛出IOException。
注意:不论是创建文件、创建目录还是删除文件,只有在动作真正发生的时候会返回true。
FileUtils类
在项目中写一些工具类包装通用操作是很有必要的,看了一下apache的FileUtils类,copy了一些方法出来:
/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License. You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/ package com.mengdd.file;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;/** FileUtils copied from org.apache.commons.io.FileUtils*/ public class FileUtils {/*** Construct a file from the set of name elements.** @param directory* the parent directory* @param names* the name elements* @return the file*/public static File getFile(File directory, String... names) {if (directory == null) {throw new NullPointerException("directorydirectory must not be null");}if (names == null) {throw new NullPointerException("names must not be null");}File file = directory;for (String name : names) {file = new File(file, name);}return file;}/*** Construct a file from the set of name elements.** @param names* the name elements* @return the file*/public static File getFile(String... names) {if (names == null) {throw new NullPointerException("names must not be null");}File file = null;for (String name : names) {if (file == null) {file = new File(name);}else {file = new File(file, name);}}return file;}/*** Opens a {@link FileInputStream} for the specified file, providing better* error messages than simply calling <code>new FileInputStream(file)</code>* .* <p>* At the end of the method either the stream will be successfully opened,* or an exception will have been thrown.* <p>* An exception is thrown if the file does not exist. An exception is thrown* if the file object exists but is a directory. An exception is thrown if* the file exists but cannot be read.** @param file* the file to open for input, must not be {@code null}* @return a new {@link FileInputStream} for the specified file* @throws FileNotFoundException* if the file does not exist* @throws IOException* if the file object is a directory* @throws IOException* if the file cannot be read*/public static FileInputStream openInputStream(File file) throws IOException {if (file.exists()) {if (file.isDirectory()) {throw new IOException("File '" + file+ "' exists but is a directory");}if (file.canRead() == false) {throw new IOException("File '" + file + "' cannot be read");}}else {throw new FileNotFoundException("File '" + file+ "' does not exist");}return new FileInputStream(file);}/*** Opens a {@link FileOutputStream} for the specified file, checking and* creating the parent directory if it does not exist.* <p>* At the end of the method either the stream will be successfully opened,* or an exception will have been thrown.* <p>* The parent directory will be created if it does not exist. The file will* be created if it does not exist. An exception is thrown if the file* object exists but is a directory. An exception is thrown if the file* exists but cannot be written to. An exception is thrown if the parent* directory cannot be created.** @param file* the file to open for output, must not be {@code null}* @param append* if {@code true}, then bytes will be added to the* end of the file rather than overwriting* @return a new {@link FileOutputStream} for the specified file* @throws IOException* if the file object is a directory* @throws IOException* if the file cannot be written to* @throws IOException* if a parent directory needs creating but that fails*/public static FileOutputStream openOutputStream(File file, boolean append)throws IOException {if (file.exists()) {if (file.isDirectory()) {throw new IOException("File '" + file+ "' exists but is a directory");}if (file.canWrite() == false) {throw new IOException("File '" + file+ "' cannot be written to");}}else {File parent = file.getParentFile();if (parent != null) {if (!parent.mkdirs() && !parent.isDirectory()) {throw new IOException("Directory '" + parent+ "' could not be created");}}}return new FileOutputStream(file, append);}public static FileOutputStream openOutputStream(File file)throws IOException {return openOutputStream(file, false);}/*** Cleans a directory without deleting it.** @param directory* directory to clean* @throws IOException* in case cleaning is unsuccessful*/public static void cleanDirectory(File directory) throws IOException {if (!directory.exists()) {String message = directory + " does not exist";throw new IllegalArgumentException(message);}if (!directory.isDirectory()) {String message = directory + " is not a directory";throw new IllegalArgumentException(message);}File[] files = directory.listFiles();if (files == null) { // null if security restrictedthrow new IOException("Failed to list contents of " + directory);}IOException exception = null;for (File file : files) {try {forceDelete(file);}catch (IOException ioe) {exception = ioe;}}if (null != exception) {throw exception;}}// -----------------------------------------------------------------------/*** Deletes a directory recursively.** @param directory* directory to delete* @throws IOException* in case deletion is unsuccessful*/public static void deleteDirectory(File directory) throws IOException {if (!directory.exists()) {return;}cleanDirectory(directory);if (!directory.delete()) {String message = "Unable to delete directory " + directory + ".";throw new IOException(message);}}/*** Deletes a file. If file is a directory, delete it and all* sub-directories.* <p>* The difference between File.delete() and this method are:* <ul>* <li>A directory to be deleted does not have to be empty.</li>* <li>You get exceptions when a file or directory cannot be deleted.* (java.io.File methods returns a boolean)</li>* </ul>** @param file* file or directory to delete, must not be {@code null}* @throws NullPointerException* if the directory is {@code null}* @throws FileNotFoundException* if the file was not found* @throws IOException* in case deletion is unsuccessful*/public static void forceDelete(File file) throws IOException {if (file.isDirectory()) {deleteDirectory(file);}else {boolean filePresent = file.exists();if (!file.delete()) {if (!filePresent) {throw new FileNotFoundException("File does not exist: "+ file);}String message = "Unable to delete file: " + file;throw new IOException(message);}}}/*** Deletes a file, never throwing an exception. If file is a directory,* delete it and all sub-directories.* <p>* The difference between File.delete() and this method are:* <ul>* <li>A directory to be deleted does not have to be empty.</li>* <li>No exceptions are thrown when a file or directory cannot be deleted.</li>* </ul>** @param file* file or directory to delete, can be {@code null}* @return {@code true} if the file or directory was deleted, otherwise* {@code false}**/public static boolean deleteQuietly(File file) {if (file == null) {return false;}try {if (file.isDirectory()) {cleanDirectory(file);}}catch (Exception ignored) {}try {return file.delete();}catch (Exception ignored) {return false;}}/*** Makes a directory, including any necessary but nonexistent parent* directories. If a file already exists with specified name but it is* not a directory then an IOException is thrown.* If the directory cannot be created (or does not already exist)* then an IOException is thrown.** @param directory* directory to create, must not be {@code null}* @throws NullPointerException* if the directory is {@code null}* @throws IOException* if the directory cannot be created or the file already exists* but is not a directory*/public static void forceMkdir(File directory) throws IOException {if (directory.exists()) {if (!directory.isDirectory()) {String message = "File " + directory + " exists and is "+ "not a directory. Unable to create directory.";throw new IOException(message);}}else {if (!directory.mkdirs()) {// Double-check that some other thread or process hasn't made// the directory in the backgroundif (!directory.isDirectory()) {String message = "Unable to create directory " + directory;throw new IOException(message);}}}}/*** Returns the size of the specified file or directory. If the provided* {@link File} is a regular file, then the file's length is returned.* If the argument is a directory, then the size of the directory is* calculated recursively. If a directory or subdirectory is security* restricted, its size will not be included.** @param file* the regular file or directory to return the size* of (must not be {@code null}).** @return the length of the file, or recursive size of the directory,* provided (in bytes).** @throws NullPointerException* if the file is {@code null}* @throws IllegalArgumentException* if the file does not exist.**/public static long sizeOf(File file) {if (!file.exists()) {String message = file + " does not exist";throw new IllegalArgumentException(message);}if (file.isDirectory()) {return sizeOfDirectory(file);}else {return file.length();}}/*** Counts the size of a directory recursively (sum of the length of all* files).** @param directory* directory to inspect, must not be {@code null}* @return size of directory in bytes, 0 if directory is security* restricted, a negative number when the real total* is greater than {@link Long#MAX_VALUE}.* @throws NullPointerException* if the directory is {@code null}*/public static long sizeOfDirectory(File directory) {checkDirectory(directory);final File[] files = directory.listFiles();if (files == null) { // null if security restrictedreturn 0L;}long size = 0;for (final File file : files) {size += sizeOf(file);if (size < 0) {break;}}return size;}/*** Checks that the given {@code File} exists and is a directory.** @param directory* The {@code File} to check.* @throws IllegalArgumentException* if the given {@code File} does not exist or is not a* directory.*/private static void checkDirectory(File directory) {if (!directory.exists()) {throw new IllegalArgumentException(directory + " does not exist");}if (!directory.isDirectory()) {throw new IllegalArgumentException(directory+ " is not a directory");}}}
FileUtils.java
参考资料
File类官方文档:
http://docs.oracle.com/javase/7/docs/api/java/io/File.html
org.apache.commons.io.FileUtils源码:
http://grepcode.com/file/repo1.maven.org/maven2/commons-io/commons-io/2.4/org/apache/commons/io/FileUtils.java
本博客旧博文:
Java IO File类
Java IO 用递归实现目录删除和树形目录展示 Java实现
Java File类总结和FileUtils类相关推荐
- java file构造方法_Java中FileOutputStream类的常用方法
今天动力节点java学院小编将为大家分享Java中FileOutputStream类的常用方法,希望通过此文能够帮助到大家,下面就随小编一起看看Java中FileOutputStream类的常用方法都 ...
- java file 跨 盘符_File类——遍历盘符根目录查找文件报错 java.lang.NullPointerException...
编写java程序如下; //示例程序1 package com.cskaoyan.Day15_HomeWork; import java.io.File; /*查找某个目录下的所有文件,但是不包括子文 ...
- java - FileUtils类
一.概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作 ...
- java File类 常用相关函数
java File类 相关函数 1.构建函数 2.判断相关函数 4.创建相关函数 5.删除相关函数 6.获取相关函数 1.构建函数 /*** File 构造方法* file 常用构造方法* 1: Fi ...
- 探究Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类
转载自 探究Java File类中list().listFiles()的使用及区别,认识和使用匿名内部类 内容概要: 1.认识File类: 2.File的构造函数: 3.list()及其重载方 ...
- java file用法_Java File 类的使用方法详解(转)
转自:http://www.codeceo.com/article/java-file-class.html Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对J ...
- java file 实例_Java File类的详解及简单实例
Java File类的详解及简单实例 1. File():构造函数,一般是依据文件所在的指定位置来创建文件对象. CanWrite():返回文件是否可写. CanRead():返回文件是否可读. Co ...
- JAVA File类、IO流体验与简介(字节流、字符流、序列流、打印流、编码、递归)
1. File类 1.1. File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动 ...
- java File类
java File类 今天我要总结一下java File类.这个是一个很重要的类. 首先是我画的思维导图. 还写了一些自己写的代码. /*** Date : 2017/6/24* Author : H ...
最新文章
- 利用CNN来检测伪造图像
- flash 版的mp3编码代码
- JSONTools Validator的使用
- android自定义曲线控件,Android自定义折线图
- 微信小程序引入外部字体后编译包过大的问题解决
- 【笔记】更改windows,excel,word背景色为眼睛保护色
- misc.imrotate()
- c语言 大小写 islower,C 库函数 islower() 使用方法及示例
- css3的过度,transition
- java实现短信发送
- iOS平台手机银行App大多存安全风险漏洞
- 在word或wps中使用宏代码自动生成手写体
- NCTF Crypto WriteUp
- 求助大神 VMware 卸载
- 超声波测距仪编程_关于基于51单片机的超声波测距仪的汇编编程问题
- 修复谷歌浏览器翻译功能(win10)
- 基于Spark的巨型矩阵分布式LU计算求逆【第一篇】
- 淘宝直播2020年GMV4000亿,直播电商第一梯队出位还是出局?
- National Day
- GE核磁共振常见术语
热门文章
- 深度解析2019中国机器人行业年会主旨报告:把脉中国机器人发展,助力产业创新与协作共融...
- 上小学的读者居然造了个“编程语言”!
- 微信十年,张小龙下一步要干什么?
- Android优化之内存优化倒计时篇
- mysql为int类型的字段php取出来之后为何变为string类型?
- VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
- 从0开始的Python学习001快速上手手册
- Oracle 10g RAC RMAN备份异机单实例恢复
- 【拓扑排序】【bitset】Gym - 101128A - Promotions
- 递归查询树状结构某个确定的节点