《Java I/O 从0到1》 - 第Ⅰ滴血 File
前言
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的更多相关文章
- Java I/O 从0到1 - 第Ⅰ滴血 File
前言 File 类的介绍主要会依据<Java 编程思想>以及官网API .相信大家在日常工作中,肯定会遇到文件流的读取等操作,但是在搜索过程中,并没有找到一个介绍的很简洁明了的文章.因此, ...
- 20145208 《Java程序设计》第0周学习总结
20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...
- 《Java I/O 从0到1》 - 第Ⅱ滴血 “流”
前言 <Java I/O 从0到1>系列上一章节,介绍了File 类,这一章节介绍的是IO的核心 输入输出.I/O类库常使用流这个抽象概念.代表任何有能力产出数据的数据源对象或者是有能力接 ...
- Windows Intellij环境下Gradle的 “Could not determine Java version from ‘9.0.1’”的解决方式
当我导入Gradle项目初试Java spring的时候,遇到下面报错: Gradle complete project refresh failed Error:Could not determin ...
- 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版本里会出 ...
- 20145328 《Java程序设计》第0周学习总结
20145328 <Java程序设计>第0周学习总结 阅读心得 从总体上来说,这几篇文章都是围绕着软件工程专业的一些现象来进行描述的,但深入了解之后就可以发现,无论是软件工程专业还是我们现 ...
- Java升级替换java version "1.5.0"
首先进行java安装 http://www.cnblogs.com/someone9/p/8670585.html 2. 然后查看版本信息,仍然是1.5.0 [root@OKC java]# java ...
- Java SPI、servlet3.0与@HandlesTypes源码分析
关于Java SPI与servlet3.0的应用,这里说的很精炼,链接地址如下. https://blog.csdn.net/pingnanlee/article/details/80940993 以 ...
- exception java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
1.情景展示 Java 报错信息如下: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 2.原因分析 首先,这是越界异常,但不是数组越 ...
随机推荐
- 智能指针之auto_ptr和scoped_ptr
部分参考地址https://blog.csdn.net/yanglingwell/article/details/56011576 auto_ptr是c++标准库里的智能指针,但是具有以下几个明显的缺 ...
- xalan\xalan\2.7.2\xercesImpl.jar (系统找不到指定的文件)问题
本文转自:http://blog.csdn.net/lveliu/article/details/77772828 环境搭建为:maven+tomcat tomcat 8.5.2 以上会出现改问题(包 ...
- 第三篇——第二部分——第一文 SQL Server镜像简单介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/DBA_Huangzj/article/details/26951563 原文出处:http://bl ...
- python中__init__.py与def __init__(self)的使用
一直对__init__的使用很迷茫,这里系统的学习了解下 1.__init__.py文件-package的标识 python中每个package实际上是一个目录(Directory),程序运行时如何识 ...
- Selenium基础知识(8大元素定位概说)
1. By.name() 页面源码如下: [html] : <button id="gbqfba"aria-label="Google Search" n ...
- HDU 1078 FatMouse and Cheese ( DP, DFS)
HDU 1078 FatMouse and Cheese ( DP, DFS) 题目大意 给定一个 n * n 的矩阵, 矩阵的每个格子里都有一个值. 每次水平或垂直可以走 [1, k] 步, 从 ( ...
- Mark一下在模仿团购App搭建页面时犯的低级错误
1.关于Xib拖线错误 2.下面这个错误的根源其实是代码提示时直接敲下了回车,没看仔细,导致后来找了好久才发现该错误,郁闷啊!
- Number & Math
Java Number & Math 类 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等. 实例 int a = 5000; floa ...
- react系列(四)Redux基本概念和使用
Redux基本概念和使用 先从Flux开始 先放一个Flux官网的链接.需要fq. Flux是Facebook提出的一种构建客户端网页应用的应用架构,它是一种抽象程度很高的设计模式,鼓励单向数据流. ...
- Java反射机制--是什么,为什么,怎么用。
往往当我们面对一项新的知识时,我们往往需要知道三个方面,它是什么,它能做什么,它比原有知识强在哪里,我们该怎么使用它.当你能够解决这些问题时,便意味着你已经对这项知识入门了. 一.是什么 Java R ...