在之前的文章我们都是通过 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实现 LeetCode 592 分数加减运算(纯体力活)

    592. 分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数 ...

  2. Java实现 LeetCode 313 超级丑数

    313. 超级丑数 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7, ...

  3. java实现第六届蓝桥杯分机号

    分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, 766,918,201 就不符合要求. ...

  4. Python爬虫 requests库基础

    requests库简介 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支 ...

  5. /etc/alternatives

    如何安装一个可执行程序 一般来说我们一个可执行程序,可能在多个路径下,比如在opt路径下,或者在自己的home下. 当要达到在系统的任意路径下敲击该命令,都可执行的话,一般要将该可执行命令的路径加入到 ...

  6. 利用tcpdump命令统计http的GET和POST请求

    1.搭建的知识库服务器, 需要统计来访者都是哪些人,因为系统不是自己开发的,看不到访问日志.所以考虑从系统层面抓取访问流量来实现. 2.通过tcpdump抓取的数据包,在wireshark中打开发现, ...

  7. java作品集:企业信息门户webtap

    作品背景 随着企业应用的软件越来越多,并且信息软件基本以B/S为主了,很多时候各种软件的地址,让大家记的头昏脑胀,并且一堆密码要记,而且大部分系统之间无法互通,虽然市面上有各种集成方案,但无法做到简单 ...

  8. Python + MySQL 批量查询百度收录

    做SEO的同学,经常会遇到几百或几千个站点,然后对于收录情况去做分析的情况 那么多余常用的一些工具在面对几千个站点需要去做收录分析的时候,那么就显得不是很合适. 在此特意分享给大家一个批量查询百度收录 ...

  9. RocketMQ系列(五)广播与延迟消息

    今天要给大家介绍RocketMQ中的两个功能,一个是"广播",这个功能是比较基础的,几乎所有的mq产品都是支持这个功能的:另外一个是"延迟消费",这个应该算是R ...

  10. firda安装和使用

    frida是一个轻量级别的hook框架. frida由两部分组成:一部分是运行在系统上的交互工具frida CLI,另一部分是运行在目标机器上的代码注入工具frida-server. 推荐使用pyth ...