【Directory】文件操作(初识文件操作二)
上篇我们说了关于文件的创建删除更改可以通过File这个类来完成。对于目录的操作其实File类也可以完成创建删除等相关的操作。用法跟文件的方法大致相同。
那么下面就一起来看一下关于目录相关的用法。
一,通过File类创建目录
1.创建单层目录
package Test1;
import java.io.File;
public class CreatSingleDir {
public static void creatSingleDir(String string){
File dir = new File(string);
if(dir.exists()){
return;
}else{
dir.mkdir();
System.out.println("目录创建成功!");
}
}
}
CreatSingleDir
测试类:
package Test1;
public class TestDir {
public static void main(String[] args) {
CreatSingleDir creat = new CreatSingleDir();
creat.creatSingleDir("C:/Users/IBM_ADMIN/Desktop/DirTestDemo");
}
}
TestDir
2.创建多层目录
package Test1;
import java.io.File;
public class CreatMultDir {
public static void creatMultDir(String string) {
File dir = new File(string);
if (!dir.exists()) {
dir.mkdirs();
System.out.println("多目录创建成功!");
}
return;
}
}
CreatMultDir
测试类:
package Test1;
public class TestDir {
public static void main(String[] args) {
CreatMultDir mult = new CreatMultDir();
mult.creatMultDir("C:/Users/IBM_ADMIN/Desktop/DirTestDemo/test1/test2/test3");
}
}
TestDir
注意事项:
1.单层目录的创建跟多层目录的创建都是通过File类实例化后的方法来创建
2.区别在于单层目录使用的是.mkdir()而创建多层目录使用的是.mkidirs()方法
3.建议不管是创建单层还是多层目录首先先通过.exists()方法去判断下创建的目录是否已存在
二,通过File类修改文件,目录名
package Test1;
import java.io.File;
public class TestDir {
public static void main(String[] args) {
File file1 = new File("C:/Users/IBM_ADMIN/Desktop/111");
File file2 = new File("C:/Users/IBM_ADMIN/Desktop/222");
File file3 = new File("C:/Users/IBM_ADMIN/Desktop/333.txt");
File file4 = new File("C:/Users/IBM_ADMIN/Desktop/444.txt");
file1.renameTo(file2); //把file1中的目录名变为file2中的目录名
file3.renameTo(file4); //把file3中的文件文件名变为file4中的文件名
}
}
结果:

三,通过File类列出指定目录下的所有目录及文件
package Test1;
import java.io.File;
public class TestDir {
public static void main(String[] args) {
File dir = new File("C:/Users/IBM_ADMIN/Desktop/NewDirectory");
for (String d : dir.list()) { //通过.list()方法把上述指定路径下的所有目录跟文件显示出来。注意:这里显示的不包含下层目录中的子目录及文件
System.out.println(d);
}
}
}
结果注意事项:显示出来的是当前目录下的所有文件于目录。并不包含子目录下的目录及文件

四,通过File类删除目录(必须为空目录)
package Test1;
import java.io.File;
public class DeleteSingleDir {
public static void deleteSingleDir(String string) {
File dir = new File(string);
if (!dir.exists()) {
System.out.println("目录不存在,删除失败!");
} else {
dir.delete();
System.out.println("目录删除成功!");
}
}
}
DeleteSingleDir
测试类:
package Test1;
import java.io.File;
public class TestDir {
public static void main(String[] args) {
DeleteSingleDir sdir = new DeleteSingleDir();
sdir.deleteSingleDir("C:/Users/IBM_ADMIN/Desktop/tonyliu");
}
}
TestDir
结果:
删除前

删除后

注意事项:
deleteSingleDir方法中的.delete()方法只针对空目录才可以进行删除。如果目录中有文件或子目录的话,.delete()是无法进行删除的。
五,通过File类递归删除目录或文件
注意事项:这里说到了递归,顾名思义通过原有的.delete()方法是无法直接删除有文件的目录以及下属子目录的。那么要想删除,必须手动编写递归方法来进行删除。
下面的代码中包含了递归方法,详细请参考代码段及注释。
package Test1;
import java.io.File;
public class DeleteMultDir {
public static void DeleteMultDir(String string) {
File mult = new File(string);
if (!mult.exists()) {
System.out.println("目录不存在,无法删除!");
}
if (delete(mult))
System.out.println("删除成功!");
else
System.out.println("删除失败!");
}
/**
* 递归删除
*
* @param current
* @return
*/
public static boolean delete(File current) {
boolean flag = true;
for (File file : current.listFiles()) {
if (file.isDirectory()) {
flag = flag && delete(file); // flag为退出标识符.而delete(file)delete是递归,file为遍例出来的目录.把每个目录作为参数传递.
}
}
return flag && current.delete(); // 如果遍例出来的是文件不是目录就不会执行上面这句代码.就执行current.delete()方法删除文件.
}
}
DeleteMultDir
测试类:
package Test1;
import java.io.File;
public class TestDir {
public static void main(String[] args) {
DeleteMultDir mult = new DeleteMultDir();
mult.DeleteMultDir("C:/Users/IBM_ADMIN/Desktop/Dirdemo1");
}
}
TestDir
结果:
脚本执行前:

脚本执行后:

五,通过File类列举目录(指列举当前目录下子目录与文件)
package Test1;
import java.io.File;
public class ListSingDirOrFiles {
public static void listSingleDirOrFiles(String string) {
File files = new File(string);
if (files != null) {
for (String fil : files.list()) {
System.out.println(fil);
}
}
}
}
ListSingDirOrFiles
测试类:
package Test1; import java.io.File;
import java.io.IOException; import Test.CreatNewFiles; public class TestDir { public static void main(String[] args) throws IOException {
ListSingDirOrFiles dirs = new ListSingDirOrFiles();
dirs.listSingleDirOrFiles("C:/Users/IBM_ADMIN/Desktop/liupeng/demo1");
}
}
TestDir
结果:

六,通过File类列举目录(包含递归列举目录下子目录及子文件)
package Test1; import java.io.File;
import java.util.Scanner; public class ListMultDirOrFiles { public static void listMultDirOrFiles() {
Scanner input = new Scanner(System.in);
System.out.println("请输入查找目录:");
String fileName = input.next() + File.separator; // File.separator可以理解为路经连接符.例如(C:\)中的\,因为系统不同如果是Linux可能是/tmp的写法.因此为了不区分系统,统一用File.separator. File files = new File(fileName);
printFiles(files); } /**
* 递归遍例目录,文件
*
* @param f
*/
public static void printFiles(File f) {
if (f != null) { // 判断是否为空
if (f.isDirectory()) { // 如果是目录
File[] fileArray = f.listFiles(); // list出该目录下的所有文件包括子目录,并传递fileArray集合中
for (int i = 0; i < fileArray.length; i++) {
// 递归循环
printFiles(fileArray[i]);
} } else {
System.out.println(f);
}
}
} }
ListMultDirOrFiles
测试类:
package Test1; import java.io.File;
import java.io.IOException; import Test.CreatNewFiles; public class TestDir { public static void main(String[] args) throws IOException { ListMultDirOrFiles mult = new ListMultDirOrFiles(); mult.listMultDirOrFiles();
}
}
TestDir
结果:

关于文件操作还有很多复杂但是日常业务中经常用到的案例。比如在一个文件夹下统一删除后缀为,什么什么的文件。如何一并更改文件后缀,如何一扩copy文件等。具体的使用方法在日后具体情况下再陆续更新。对于初学者的我来说,也需要点时间思考一下某些固定情况下如何更高效的完成文件操作的便利化。会在接下来的篇章中更新其用法。
坚信只要不断努力,终会达成梦想!
【Directory】文件操作(初识文件操作二)的更多相关文章
- 孤荷凌寒自学python第三十三天python的文件操作初识
孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...
- 【File】文件操作(初识文件操作一)
一,初识文件流 看到标题就知道接下来的所有操作对象都是面对文件进行的.那么问题来了.在java中目录是不是也属于文件呢?答案是yes.既然目录也属于文件,那么对于目录跟文件的区分就显现出来了.在接下来 ...
- Unix/Linux环境C编程入门教程(40) 初识文件操作
1.函数介绍 close(关闭文件) 相关函数 open,fcntl,shutdown,unlink,fclose 表头文件 #include<unistd.h> 定义函数 int ...
- 19-3-8Python中编码的进阶、文件操作初识、深浅copy
编码的进阶 ASCII:英文字母,数字,特殊符号,——> 二进制的对应关系 Str: 1个字符——> 1个字节 Unicode:万国码:世界上所有的文字与二进制的对应关系 1个字符——& ...
- Unix/Linux环境C编程新手教程(40) 初识文件操作
1.函数介绍 close(关闭文件) 相关函数 open,fcntl,shutdown.unlink,fclose 表头文件 #include<unistd.h> 定义函数 int ...
- Java学习笔记(二)——Java操作properties文件
[前面的话] 前段时间在学习和玩java web相关的东西,对于这些技术,一边学习,一边做东西,一边总结,希望可以一边成长和有所收获.有时总是思考太多反而成为了前进的阻力,所以对于生活还是简单一些,不 ...
- C#操作文件夹及文件的方法的使用
本文收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件.指定文件夹下面的所有内容copy到目标文件夹下面.指定文件夹下面的所有内容 ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- Android文件(File)操作
Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...
- 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)
一.初识MySQL数据库 ###<1>数据库概述 1. 数据库 长期存储在计算机内的,由组织的可共享的数据集合 存储数据的仓库 文件 ...
随机推荐
- ios MBProgressHUD 使用,及二次封装
MBProgressHUD是一个显示HUD窗口的第三方类库,用于在执行一些后台任务时,在程序中显示一个表示进度的loading视图和两个可选的文本提示的HUD窗口.MBProgressHUD 二次封装 ...
- System path '/Users/hxy/Library/Caches/PyCharm2018.2' is invalid.
Mac系统下安装pycharm后启动出现System path '/Users/hxy/Library/Caches/PyCharm2018.2' is invalid.问题: 1.出现原因: 1.1 ...
- Java面向对象的练习。动物乐园
本次项目是:以面向对象的思想设计动物乐园系统. 动物乐园中有猫,狗,鸭子等成员,还可以增加新成员. 猫和鸭子都有自己的名字,都有自己的腿,但腿的条数不同,猫和鸭子会发出叫声,猫的叫声是:喵喵喵……,鸭 ...
- 快速获取雪碧图的图标样式插件 - gulp-css-spriter教程
如何快速把合成好的雪碧图,快速获取图标的样式呢? 用gulp-css-spriter很简单. 第一步: 在某个文件夹用shitf+鼠标右键 第二步: npm install gulp-css-spri ...
- 关闭VAX的拼写检查_解决中文红色警告问题
菜单VAssistX->Visual Assistant X Options->Advanced->Underlines下 取消“Underline spelling errors ...
- Nagios-4.1.1 (OpenLogic CentOS 7.2)
平台: CentOS 类型: 虚拟机镜像 软件包: apache2.4.6 nagios 4.1.1 php5.4.16 devops monitoring nagios open-source ph ...
- Select与SelectMany
SelectMany在MSDN中的解释:将序列的每个元素投影到 IEnumerable(T) 并将结果序列合并为一个序列. 不用去用foreach进行两次遍历,就可以将子循环需要的元素过滤出来... ...
- [转载]AngularJS入门教程04:双向绑定
在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f ...
- codeforces 599D Spongebob and Squares
很容易得到n × m的方块数是 然后就是个求和的问题了,枚举两者中小的那个n ≤ m. 然后就是转化成a*m + c = x了.a,m≥0,x ≥ c.最坏是n^3 ≤ x,至于中间会不会爆,测下1e ...
- UVALive 3530 Martian Mining(贪心,dp)
分析: 对于网格grid[i][j]如果放向上的管道,那么grid[i][k], k>j 就只能放向上的管道了. 那么定义dp[i][j]表示第i行,最后一个放向左的管道是j的最大总矿量. j ...