在之前的文章我们都是通过 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 内存限制:256.0MB 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的 ...

  2. Java实现 LeetCode 137 只出现一次的数字 II(二)

    137. 只出现一次的数字 II 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空 ...

  3. Java实现 洛谷 P1010 幂次方

    输入输出样例 输入 #1 1315 输出 #1 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) import java.util.Scanner; pu ...

  4. matplotlib 示例

    示例1 import numpy as np import matplotlib.pyplot as plt #plt.rcParams['font.family'] = ['sans-serif'] ...

  5. 基于httpclient的一些常用方法封装

    package com.util; import java.io.IOException; import java.io.UnsupportedEncodingException; import ja ...

  6. 网络聚合Network Teaming

    team是新的聚合软件,依赖于安装包teamd,可以通过nmcli管理. team和bond的区别在于,支持hash加密,支持负载均衡,支持8块网卡,更好地支持IPV6,总之要取代bond. 1. 添 ...

  7. RESTORE FILELISTONLY FROM DISK ='D:\DataSQL\BakFile\pubs.bak' _ 数据库安装工具_连载_4

    在查询分析器中执行:  RESTORE FILELISTONLY FROM DISK = 'D:\DataSQL\BakFile\pubs.bak'根据查询类型判断Type(D.L),再取得对应的Lo ...

  8. (八)跑完用例后通过maven发送邮件

    邮件类: package config; import com.sun.mail.util.MailSSLSocketFactory; import org.apache.log4j.Logger; ...

  9. tkinter操作练习一

    # -*- utf-8 -*- #@Time :2019/8/2723:17 #@Author :无邪 #@File :t_ui.py #@Software:PyCharm import tkinte ...

  10. UniRx精讲(二):独立的 Update &UniRx 的基本语法格式

    独立的 Update 在 UniRx 简介的时候,笔者讲了一种比较麻烦的情况:就是在 MonoBehaviour 的 Update 中掺杂了大量互相无关的逻辑,导致代码非常不容易阅读. 这种情况我们平 ...