在之前的文章我们都是通过 Java 在内存中应用,本章开始我们来看一下 Java 在系统文件(硬盘)上的操作。

系统文件就是我们电脑中的文件,简单来说就是像 Windows 系统中 C D E 等各类盘符中的文件。Java 在系统文件的操作需要通过  File 来完成。

接下来我们通过一个简单的实例来看一下 Java 在操作系统文件中的基本操作。

如上图,我们先在项目目录下创建一个 fileDemo.txt 的文件,通过电脑可以查看到它的一些属性,如名称,大小,是否可读可写等,接下来我们通过代码来对该文件进行一些操作。

 package FileDemo;

 import java.io.File;

 /**
* java.io.File
*
* @author wjt
* File 可以表示一个文件或目录
* 使用 File 可以:
* 1、访问其表示的文件或目录的属性(如:名字,长度等)
* 2、可以创建或删除一个文件或目录
* 3、可以访问一个目录的所有子项信息
* 但是 File 不能访问一个文件的数据内容
*/
public class FileDemo1 {
public static void main(String[] args) {
// File.separator 相当于 / ,为了兼容 Windows 和 Linux 等系统
File file = new File("." + File.separator + "fileDemo.txt");
String name = file.getName(); // 文件名
long len = file.length(); // 文件名的长度
boolean canRead = file.canRead(); // 文件是否可读
boolean canWrite = file.canWrite(); // 文件是否可写
boolean isHidden = file.isHidden(); // 文件是否隐藏
System.out.println("name: " + name); // name: fileDemo.txt
System.out.println("len: " + len); // len: 11
System.out.println("canRead: " + canRead); // canRead: true
System.out.println("canWrite: " + canWrite); // canWrite: true
System.out.println("isHidden: " + isHidden); // isHidden: false
}
}

通过对比我们可以看出代码运行对文件所做的打印内容和电脑属性所展示的文件名,大小,可读写性等是一样的。

接下来我们再来看一下如何创建一个文件

 package FileDemo;

 import java.io.File;
import java.io.IOException; /**
* 创建一个文件
*
* @author wjt
*/
public class FileDemo2 {
public static void main(String[] args) throws IOException {
/**
* 在当前目录下创建文件 fileDemo2.txt
* 默认路径就是当前路径,即 "./",所以可以不写
*/
File file = new File("fileDemo2.txt");
if (!file.exists()) { // 判断是否存在该文件
file.createNewFile();
System.out.println("创建完毕!");
} else {
System.out.println("文件已存在!");
}
}
}

在上面都代码中,我们可以通过 file.exists() 来判断文件是否存在,然后通过 file.createNewFile() 来创建文件,需要注意都是该方法需要抛出异常,然后我们就可以在当前目录下创建我们需要都文件来。

既然能创建文件,纳闷我们就能删除文件,如下:

 /**
* 删除一个文件
*
* @author wjt
*/
public class FileDemo3 {
public static void main(String[] args) {
/**
* 删除当前目录中都 fileDemo2.txt 文件
*/
File file = new File("fileDemo2.txt");
if (file.exists()) { // 判断是否存在该文件
file.delete();
System.out.println("删除完毕");
} else {
System.out.println("文件不存在");
}
}
}

在上面都代码中,我们可以通过 file.delete() 方法来对文件进行删除,需要注意对是这里的删除是真的删了,在电脑的回收站里是找不到的,不像电脑的删除操作,所以在进行此操作时需要特别注意!

既然可以创建文件,那么我们也就能创建文件目录,如下:

 /**
* 创建一个目录
*
* @author wjt
*/
public class FileDemo4 {
public static void main(String[] args) {
// 创建一个单级目录
File dir1 = new File("demo");
if (!dir1.exists()) {
dir1.mkdir();
System.out.println("创建目录完毕!");
} else {
System.out.println("该目录已存在!");
}
// 创建一个多级目录 ./a/b/c
File dir2 = new File("a" + File.separator + "b" + File.separator + "c");
if (!dir2.exists()) {
// mkdirs() 在创建当前目录的同时将所有不存在的父目录一起创建出出来
dir2.mkdirs();
System.out.println("创建目录完毕!");
} else {
System.out.println("该目录已存在!");
}
}
}

创建文件和创建目录方法上大同小异,只不过是换成了 mkdir() 方法,但是需要注意对是在创建多级目录时所需要调用的方法是 mkdirs() 来进行创建。

同样的我们也可以对创建对目录进行删除,如下:

 /**
* 删除目录
* @author wjt
*/
public class FileDemo5 {
public static void main(String[] args) {
File dir1 = new File("demo");
if(dir1.exists()){
dir1.delete();
System.out.println("目录删除成功!");
}else {
System.out.println("目录不存在!");
} File dir2 = new File("a");
if(dir2.exists()){
dir2.delete();
System.out.println("目录删除成功!");
}else {
System.out.println("文件不存在!");
}
}
}

删除目录和删除文件所用对方法都是 delete(),我们通过该方法将刚才创建的目录 demo 和 a 进行删除,可以发现 demo 目录被删除成功了,a 目录虽然也打印了 “目录删除成功”,但是并没有真正的删除掉,这是因为 a 目录并不是一个空目录,如果想要删该目录,需要老老实实一级一级进行删除!如下代码:

 /**
* 获取一个目录中所有的子项
*
* @author wjt
*/
public class FileDemo6 {
public static void main(String[] args) {
// 获取当前目录中的所有子项
File dir = new File(".");
/**
* boolean isFile() 判断是否为一个文件
* boolean isDirectory() 判断是否为一个目录
*/
if (dir.isDirectory()) {
/**
* File[] listFiles() 获取所有子项
*/
File[] subs = dir.listFiles();
for (File sub : subs) {
if (sub.isFile()) {
System.out.print("文件:");
} else {
System.out.print("目录:");
}
System.out.println(sub.getName());
// 文件:demo.iml
// 目录:out
// 目录:a
// 文件:fileDemo.txt
// 目录:.idea
// 目录:src
}
}
}
}

在上面的代码中,我们可以获取到某一个目录下所有到文件和目录,那么我们就可以实现一个方法来对指定目录进行删除,如下

 /**
* 删除多级目录
*/
public class FileDemo7 {
public static void main(String[] args) {
File dir = new File("a");
delete(dir);
} public static void delete(File file) {
if (file.isDirectory()) {
// 将其所有子项删除
File[] subs = file.listFiles();
for (File sub : subs) {
// 递归调用
delete(sub);
}
}
file.delete();
}
}

通过上面对方法我们可以将多级目录进行删除,其中我们用到了递归操作!递归操作开销还是挺大对,在程序中应尽量避免!

我们在上面的代码中用到了 listFiles() 方法来获取当前目录下所有的文件和目录,当然我们也可以通过该方法获取到我们想要的文件或目录,如下:

 /**
* 获取一个目录中符合条件对部分子项
* 使用重载对 listFiles 方法,需要传入一个额外的文件过滤器
* 文件过滤器是一个接口:FileFilter
*
* @author wjt
*/
public class FileDemo8 {
public static void main(String[] args) {
File dir = new File(".");
// 获取名字以 "." 开头的子项
File[] subs = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.getName().startsWith(".");
}
});
for (File sub : subs) {
System.out.println(sub.getName()); // .idea
}
}
}

Java 从入门到进阶之路(二十八)的更多相关文章

  1. Java 从入门到进阶之路(十八)

    在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更 ...

  2. Java 从入门到进阶之路(十二)

    在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...

  3. Java 从入门到进阶之路(十)

    之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...

  4. Java 从入门到进阶之路(十五)

    在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意 ...

  5. Java 从入门到进阶之路(十四)

    在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时 ...

  6. Java 从入门到进阶之路(十六)

    在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...

  7. Java 从入门到进阶之路(十九)

    在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,ch ...

  8. Python 爬虫从入门到进阶之路(十八)

    在之前的文章我们通过 scrapy 框架 及 scrapy.Spider 类做了一个<糗事百科>的糗百爬虫,本章我们再来看一下相较于 scrapy.Spider 类更为强大的 CrawlS ...

  9. Java 从入门到进阶之路(二十)

    在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...

  10. Java 从入门到进阶之路(二十三)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的迭代器 Iterator,本章我们来看一下 Java 集合框架中的Collection 的泛型. 在讲泛型之前我们先来 ...

随机推荐

  1. Java实现 蓝桥杯 算法训练 前缀表达式

    算法训练 前缀表达式 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:"运算符 对象1 对象2", ...

  2. Java实现 LeetCode 237 删除链表中的节点

    237. 删除链表中的节点 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: ...

  3. Java实现 LeetCode 28 实现strStr()

    28. 实现 strStr() 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 ...

  4. Java实现蓝桥杯G将军

    G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加队员 ...

  5. Java实现 蓝桥杯 历届试题 蚂蚁感冒

    问题描述 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有1只蚂 ...

  6. PAT 数字黑洞

    给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞 ...

  7. CDN百科 | 假如没有CDN,网络世界会变成什么样?

    很多人都知道CDN是内容分发加速,所谓内容分发,就是将本来位于源站的内容分发到全国各地的节点,方便用户去就近访问所需的内容.随着移动互联网.云计算等一代代技术变革,CDN已经成为了缓解互联网网络拥塞. ...

  8. 如何0基础学习C/C++?

    谈及C/C++,功能强大.应用广泛,一旦掌握了后,若是再自学其他语言就显得轻而易举了.那为什么学C/C++的人少呢?很多人认为C/C++虽然博大精深,但也难学.其实就本人认为C/C++并非是“diff ...

  9. win10系统无法删除文件的解决方法

    方法/步骤 1:首先进入不能删除的文件所在的文件夹 2:右键单击此文件夹,选择授予访问权限 3:在授权界面选择删除权限 4:在删除权限中点击更改共享权限 5:我们选择administrator级别,点 ...

  10. <Win10开发>UWP使用.Net Native编译时遇到的一些问题。

    最近开始尝试把WP8.1 Runtime的项目升级成Win10 UWP,我用的方法没什么技巧性,就是直接复制文件和代码到新建的UWP项目.结果是后台代码未经修改,全部正常运行.但是UI控件的布局有些偏 ...