前言

  File 类的介绍主要会依据《Java 编程思想》以及官网API 。相信大家在日常工作中,肯定会遇到文件流的读取等操作,但是在搜索过程中,并没有找到一个介绍的很简洁明了的文章。因此,在最近比较轻松的时间里做一个关于 《Java I/O 从0到1》系列。规划是包括以下几个方面:File类、字节流、字符流、字节字符的组合使用、编码示例以及JDK1.4 推出的为了提高性能增加了功能的nio类(新I/O)。那么,接下来,进行File 的介绍。

File

  从File 的字面意思来讲,就会认为指的是文件。其实并不是如此,File类名字有一定的误导性。FilePath(文件路径)对此类来说是个更好的名字。摘自《Java编程思想 第四版》。File类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

  1. 它既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。

  2. 如果指的是一个文件集,那么就可以使用list(),此时会返回一个字符数组。

下面提供一个根据官网API整理的思维导图(邮件点击图片 新标签页打开 查看图片):

Xmind思维导图下载链接:http://pan.baidu.com/s/1jIzMzAY

  新建文件

    1. 创建文件的时候一定要制定路径,不然会提示找不到路径错误!

    2. new File(String pathName) 并不是真实创建文件,而是指向新建文件的引用

    3. File.separator 不同的系统平台 路径分隔符不一样,Window:\\  Unix/Linux://。因此此处不要写死路径

 /**
*
* Title: createNewFile
* Description: 创建文件
* @author yacong_liu Email:2682505646@qq.com
* @date 2017年9月19日下午6:06:24
* @param pathname
*/
public static void createNewFile(String pathname){
//创建文件的时候 不指定路径
File file = new File(pathname);
try {
file.createNewFile();
System.out.println(file.createNewFile());
} catch (IOException e) {
e.printStackTrace();
System.err.println(" create new file error ");
} //创建文件的时候制定路径
try {
File file1 = new File("D:"+File.separator+"tmp",pathname);
System.out.println(file1);
System.out.println(file1.createNewFile());
} catch (IOException e) {
System.err.println(" create new file1 error ");
e.printStackTrace();
} /**
* Console:
* false
* D:\tmp\a.txt
* true
*/ }

新建文件

  列出所有

    使用目录路径名创建File,此时File表示的是目录

 ======listAllFile("D:\\tmp"); ======

 /**
*
* Title: listAllFile
* Description: 列出所有文件
* @author yacong_liu Email:2682505646@qq.com
* @date 2017年9月19日下午6:16:57
* @param path
*/
private static void listAllFile(String path){
//path 为目录名 此处的File 表示目录
File dir = new File(path);
if(dir.isDirectory()){
File[] files = dir.listFiles();
System.out.println("目录"+dir.getName()+"下所有文件:"); for (File file : files) {
System.out.println(file.getName()+" ");
}
}
/**
* Console:
* 目录tmp下所有文件:
a.txt
b.txt
*/
}

列出指定目录下所有文件

  列出指定文件

    使用目录列表器,进行限定文件的显示。实现FilenameFilter 接口

 package io;

 import java.io.File;
import java.io.FilenameFilter; public class DirFilter implements FilenameFilter {
String extension = "."; public DirFilter(String fileExtensionNoDot) {
extension += fileExtensionNoDot;
} @Override
public boolean accept(File dir, String name) {
return name.endsWith(extension);
} }

目录列表器

  DirFilter 这个类存在的唯一原因就是accept()方法.创建这个类的目的在于吧accept()方法提供给list()使用,是list()可以回调accept(),进而决定哪些文件包含在列表中。因此这种结构也叫做 回调。更具体地说,使用的是策略模式的思想,因为list()实现了基本的功能,而且按照FilenameFilter的形式提供了这个策略。

 ========listFileByExtension("D:\\tmp","java");=======
/**
*
* Title: listFileByExtension
* Description: 列出目录下指定文件
* @author yacong_liu Email:2682505646@qq.com
* @date 2017年9月19日下午6:43:02
* @param path 目录
* @param extension 文件扩展名
*/
private static void listFileByExtension(String path,String extension){
File dir = new File(path);
if(dir.isDirectory()){
File[] files = dir.listFiles(new DirFilter(extension));
System.out.println("目录 "+dir.getName()+"下的"+extension+"文件有:");
for (File file : files) {
System.out.println(file.getName()+" ");
}
}
/**
* Console:
* 目录 tmp下的java文件有:
1.java
*/
}

列出目录中指定扩展名文件

  删除文件夹下所有文件以及该文件夹

    获取制定目录下的所有File,判断每一个File 是否是文件,如果是文件,就直接删除,如果是目录就递归调用该方法进行删除。

 ==========deleteDirectory(new File("D:\\tmp"));======
/**
*
* Title: deleteDirectory
* Description: 删除文件夹下所有文件以及该文件夹
* @author yacong_liu Email:2682505646@qq.com
* @date 2017年9月19日下午10:04:27
* @param file
*/
private static void deleteDirectory(File file) {
File[] fileArr = file.listFiles();
if (fileArr.length > 0) {
for (int i = 0; i < fileArr.length; i++) {
if (fileArr[i].isFile()) {
if (fileArr[i].delete()) {
System.out.println(fileArr[i] + "文件删除成功!");
} else {
System.err.println(fileArr[i] + "文件删除失败!");
}
} else {
// 递归
deleteDirectory(fileArr[i]);
}
}
} // 删除该文件夹
if (file.delete()) {
System.out.println(file + "文件夹删除成功!");
} else {
System.err.println(file + "文件夹删除失败!");
} /**
* Console:
* D:\tmp\1 - 副本 (2).java文件删除成功!
D:\tmp\1 - 副本.txt文件删除成功!
D:\tmp\1.txt文件删除成功!
D:\tmp文件夹删除成功!
*/
}

删除文件夹下所有文件以及该文件夹

  创建文件夹

    创建文件夹的时候,需要注意的也就是是创建一级目录(mkdir())还是创建多级目录(mkdirs())?

  下面举得这个例子还是符合实际的,一般情况下,业务系统中队产生的文件进行保存到磁盘的时候,就需要按照 指定目录/年/月/日/file  这样的格式进行保存。

 /**
*
* Title: createDirectory Description: 创建多级文件夹
*
* @author yacong_liu Email:2682505646@qq.com
* @date 2017年9月19日下午10:31:52
*/
private static void createDirectory() {
String year = null;
String month = null;
String day = null;
String[] strings = getDate();
year = strings[0];
month = strings[1];
day = strings[2]; // File dir = new File("D:\\tmp2\\2017\\9\\19");
File dir = new File(
"D:" + File.separator + "tmp3" + File.separator + year + File.separator + month + File.separator + day); if (!dir.exists()) {
if (dir.mkdirs()) {
System.out.println(dir.getAbsolutePath() + " 文件夹创建成功!");
} else {
System.err.println(dir.getName() + " 文件夹创建失败!");
}
} else {
System.err.println(dir.getName() + " 文件夹已经存在!");
}
} private static String[] getDate() {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
String date = f.format(new Date(System.currentTimeMillis()));
String[] strings = date.split("-");
return strings;
}

创建多级目录

那么到这里呢,关于File 类的介绍,大致就是上面总结的这些,需要更为详细的理解File的话,还是建议常浏览API文档:http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html

 

《Java I/O 从0到1》 - 第Ⅰ滴血 File的更多相关文章

  1. Java I/O 从0到1 - 第Ⅰ滴血 File

    前言 File 类的介绍主要会依据<Java 编程思想>以及官网API .相信大家在日常工作中,肯定会遇到文件流的读取等操作,但是在搜索过程中,并没有找到一个介绍的很简洁明了的文章.因此, ...

  2. 20145208 《Java程序设计》第0周学习总结

    20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...

  3. 《Java I/O 从0到1》 - 第Ⅱ滴血 “流”

    前言 <Java I/O 从0到1>系列上一章节,介绍了File 类,这一章节介绍的是IO的核心 输入输出.I/O类库常使用流这个抽象概念.代表任何有能力产出数据的数据源对象或者是有能力接 ...

  4. Windows Intellij环境下Gradle的 “Could not determine Java version from ‘9.0.1’”的解决方式

    当我导入Gradle项目初试Java spring的时候,遇到下面报错: Gradle complete project refresh failed Error:Could not determin ...

  5. hadoop 遇到java.net.ConnectException: to 0.0.0.0:10020 failed on connection

      hadoop 遇到java.net.ConnectException: to 0.0.0.0:10020 failed on connection   这个问题一般是在hadoop2.x版本里会出 ...

  6. 20145328 《Java程序设计》第0周学习总结

    20145328 <Java程序设计>第0周学习总结 阅读心得 从总体上来说,这几篇文章都是围绕着软件工程专业的一些现象来进行描述的,但深入了解之后就可以发现,无论是软件工程专业还是我们现 ...

  7. Java升级替换java version "1.5.0"

    首先进行java安装 http://www.cnblogs.com/someone9/p/8670585.html 2. 然后查看版本信息,仍然是1.5.0 [root@OKC java]# java ...

  8. Java SPI、servlet3.0与@HandlesTypes源码分析

    关于Java SPI与servlet3.0的应用,这里说的很精炼,链接地址如下. https://blog.csdn.net/pingnanlee/article/details/80940993 以 ...

  9. exception java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

      1.情景展示 Java 报错信息如下: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 2.原因分析 首先,这是越界异常,但不是数组越 ...

随机推荐

  1. ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or directory 解决办法

    >>> import MySQLdbTraceback (most recent call last):  File "<stdin>", line ...

  2. 利用Underscore求数组的交集、并集和差集

    1 数组交集函数——intersection 数组的交集是指包含多个数组中的共同元素的一个数组,求数组的交集就是找出给定数组中的共有元素. 下面实现一个求两个数组交集的函数. 判断数组是够包含指定值, ...

  3. 在powerdesigner 中出现Could not Initialize JavaVM! 应该怎么解决

    利用powerdesigner反向生成表结构时会报这个错: 请检查你的环境变量配置: 系统变量 CLASSPATH = E:\Workspaces\my-jar\mysql-connector-jav ...

  4. MATLAB入门学习(五)

    现在,我们来学画图吧.╭( ・ㅂ・)و ̑̑ 绘制函数图像最常用的命令是plot plot(x,y,s)x,y为同维向量,绘制分别以x为横坐标,y为纵坐标的曲线 如果x y 是矩阵的话则会绘制多条曲线 ...

  5. JAVA JAVA面试题和项目面试核心要点精华总结(想进大公司必看)

    http://blog.csdn.net/ourpush/article/details/53706524 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链接查询和优化问题,手写SQL语 ...

  6. shiro注解,初始化资源和权限,会话管理

     有具体问题的可以参考之前的关于shiro的博文,关于shiro的博文均是一次工程的内容  注解: 新建一个类: 此时需要有admin的权限才可以执行下面的代码 public class ShiroS ...

  7. JDBC(6)事务处理&批量处理

    事务处理就是当执行多个SQL指令,因某个指令有误,则取消执行所有的命令 它的作用是保证各项的完整性和一致性 JDBC的数据操作时 commit():提交事务 rollback():回退事务 绝位于ja ...

  8. ASP.NET Web API编程——文件上传

    首先分别介绍正确的做法和错误的做法,然后分析他们的不同和错误之处,以便读者在实现此功能时可避开误区 1正确的做法 public class AvaterController : BaseApiCont ...

  9. @SuppressWarnings注解用法详解

    @SuppressWarnings注解用法详解 今天来谈谈@SuppressWarnings注解的作用. J2SE 提供的最后一个批注是 @SuppressWarnings.该批注的作用是给编译器一条 ...

  10. 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)

    题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...