《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.原因分析 首先,这是越界异常,但不是数组越 ...
随机推荐
- 用w32tm设置服务器时间同步
服务器时间同步是一个容易被忽视的问题,但在企业级应用环境中,不同服务器之间的时间差很可能引发应用系统问题.Windows提供的w32tm程序可以用来设置时间同步服务器,其用法如下: 1.指定外部时间源 ...
- 在WAS控制台,环境下添加新的虚拟主机别名
错误现象: 11/16/13 16:52:22:612 CST] 00000021 util W com.ibm.ws.webcontainer.util.VirtualHostCo ...
- python 浮点运算 及 小数点精确位数
>>> 1050 / 3133>>> 1050 / float(31)33.87096774193548 # 分子或者分母用 ...
- hdu1113 Word Amalgamation(详解--map和string的运用)
版权声明:本文为博主原创文章.未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/35338617 转载请注明出 ...
- perl学习---控制:unless,until,next,redo,last
1.1.unless unless 的含义是:除非条件为真,否则执行块中的代码,和if正好相反 unless($fred=~ /^[A-Z_]\w*$/i){ print “The value of ...
- 理解JavaScript原始类型和引用类型
原始类型 我们知道类型(type)定义为值的一个集合,所以每种原始类型定义了它包含的值的范围及其字面量表示形式.一共有5 种原始类型(primitive type),即 Undefined.Null. ...
- l1 l2 loss
衡量预测值与真实值的偏差程度的最常见的loss: 误差的L1范数和L2范数 因为L1范数在误差接近0的时候不平滑,所以比较少用到这个范数 L2范数的缺点是当存在离群点(outliers)的时候,这些点 ...
- C# 控制台模拟序列化和反序列化
序列化:将对象转换成二进制串的过程 反序列化:将序列化过程中产生的二进制串转换成对象的过程 作用:传输数据 using System; namespace WriteTextContent { [Se ...
- 时钟晶振32.768KHz为什么是15分频?
实时时钟晶振为什么选择是32768Hz的晶振,在百度上搜索的话大部分的答案都是说2的15次方是32768,使用这个频率的晶振,人们可以很容易的通过分频电路得到1Hz的计时脉冲.但是话有说回来了,2的整 ...
- HDBS之应用代码优化
一.目录结构树 总体概述 代码检测工具sonar HDBS代码优化 总结开发注意点 二.总体概述 进入现在这家公司我的第一个任务就是对HDBS进行代码质量优化.HDBS可能大家不是很了解,现在给大家简 ...