Java IO编程——File文件操作类
在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一 一个与文件本身操作(创建、删除、重命名等)有关的类,而如果要想进行File类的操作,必须要提供有完整的路径,而后可以调用相应的方法进行处理。
1. File类的基本使用
打开JDK文档可以发现,File类时Comparable接口的子类,所以File类的对象是可以进行排序处理的。在进行File类处理的时候需要为其设置访问路径,那么对于路径的配置主要通过File类的构造方法处理:
public class Fileextends Objectimplements Serializable, Comparable<File>
·构造方法:public File(String pathname),设置要操作完整路径;
·构造方法:public File(File parent,String child),设置父路径与子目录;
如果现在要想进行文件的基本操作,可以使用如下的方法:
·创建新文件:public boolean createNewFile()throws IOException;
·判断文件是否存在:public boolean exists();
·删除文件:public boolean delete();
范例:使用File类创建一个文件(d:\mldn.txt)
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:\\mldn.txt");
if (file.exists()) {
file.delete();// 删除文件
} else { // 文件不存在
System.out.println(file.createNewFile()); // 创建新的文件
}
}
}
JavaAPIDemo
通过代码可以发现,File类实现的就是文件本身的处理。
2. File类操作深入
1、在实际的软件项目开发和运行的过程之中,往往都会在Windows中进行项目的开发,而在项目部署的时候基于Linux或Unix系统来进行项目发布以保证生产环节的安全性;
在不同的操作系统之中会存在有不同的路径分隔符:Windows分隔符“\”、Linux分隔符"/",所以在最初进行开发的时候就必须考虑不同系统环境下的分隔符的问题,所以为了解决此问题,File类提供有一个常量:public static final String separator;
范例:正常的路径编写
File file = new File("d:" + File.separator + "mldn.txt");
但是随着系统的适应性的不断加强,对于当前的路径操作,也可以随意使用了。
File file = new File("d:/mldn.txt");
//完整代码
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "mldn.txt");
if (file.exists()) {
file.delete();// 删除文件
} else { // 文件不存在
System.out.println(file.createNewFile()); // 创建新的文件
}
}
}
JavaAPIDemo
2、在进行文件创建的时候有一个重要的前提:文件的父路径必须首先存在。
·如何获取父路径:public File getParentFile();
·创建多级目录:public boolean mkdirs();
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "hello" + File.separator + "demo" + File.separator + "message"
+ File.separator + "pluto.txt");
if (!file.getParentFile().exists()) { // 父路径不存在
file.getParentFile().mkdirs() ; // 创建父路径
}
if (file.exists()) {
file.delete();// 删除文件
} else { // 文件不存在
System.out.println(file.createNewFile()); // 创建新的文件
}
}
}
JavaAPIDemo
注:这种判断并且建立父目录的操作在很多的情况下可能只需要一次,但是如果将这个判断一直都停留在代码里面,那么就会造成时间复杂度的提升,所以这个时候如果要想提升性能,请先保证目录以及创建。
3. 获取文件信息
除了可以进行文件的操作之外也可以通过File类来获取一些文件本身提供的信息,可以获取如下内容:
·文件是否可读:public boolean canRead();
·文件是否可写:public boolean canWrite();
·获取文件长度:public long length(),该方法返回的是long数据类型、字节长度;
·最后一次修改日期时间:public long lastModified();
·判断是否为目录:public boolean isDirectory();
·判断是否为文件:public boolean isFile();
//my.jpg可以修改为该盘的任一个文件,须带上后缀名
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
class MathUtil {//将字节Bytes数目转换为MB
private MathUtil() {
} public static double round(double num, int scale) {
return Math.round(Math.pow(10, scale) * num) / Math.pow(10, scale);
}
}
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "my.jpg");
System.out.println("文件是否可读:" + file.canRead());
System.out.println("文件是否可写:" + file.canWrite());
System.out.println("文件大小:" + MathUtil.round(file.length() / (double) 1024 / 1024, 2));
System.out.println(
"最后的修改时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
System.out.println("是目录吗?" + file.isDirectory());
System.out.println("是文件吗?" + file.isFile());
}
}
JavaAPIDemo
既然可以判断给定的路径是文件还是目录,那么就可以进一步的判断,如果发现是目录,则应该列出目录中的全部内容:
·列出目录内容:public File[] listFiles();
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator);
if (file.isDirectory()) { // 当前是一个目录
File result [] = file.listFiles() ; // 列出目录中的全部内容
for (int x = 0 ; x < result.length ; x ++) {
System.out.println(result[x]);
}
}
}
}
JavaAPIDemo
这些信息的获得都是文件或目录本身的操作,都是不涉及到文件内容处理的。
4. File操作案例:列出指定目录中的全部文件
由开发者任意设置一个目录的路径,而后将这个目录中所有的文件的信息全部列出,包括子目录中的所有文件,在这样的处理情况下最好的做法就是利用递归的形式来完成。
范例:列出指定目录的全部文件
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator) ; // 是一个目录
long start = System.currentTimeMillis();
listDir(file) ;
long end = System.currentTimeMillis();
System.out.println("时间是:"+(end-start));
}
public static void listDir(File file) {
if (file.isDirectory()) { // 是一个目录
File results [] = file.listFiles() ; // 列出目录中的全部内容
if (results != null) {
for (int x = 0 ; x < results.length ; x ++) {
listDir(results[x]) ; // 继续依次判断
}
}
}
System.out.println(file); // 获得完整路径
}
}
JavaAPIDemo
如果现在将路径输出变为删除操作,那么就彻底删除路径。
//慎重,小心使用 mldnjava问目录,若该目录不存在,也可以使用改盘的其他文件夹
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "mldnjava") ; // 是一个目录
listDir(file) ;
}
public static void listDir(File file) {
if (file.isDirectory()) { // 是一个目录
File results [] = file.listFiles() ; // 列出目录中的全部内容
if (results != null) {
for (int x = 0 ; x < results.length ; x ++) {
listDir(results[x]) ; // 继续依次判断
}
}
}
file.delete() ;
}
}
JavaAPIDemo
5. File操作案例:批量修改文件名称
编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀修改为.txt。
·对于这些的操作必须设置一些假设的约定,能够重命名的文件都是有后缀的,如果没有后缀的路径,则为其追加路径,如果有后缀的路径,则必须以最后一个“.”进行截取。
import java.io.File;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "test") ; // 是一个目录
long start = System.currentTimeMillis() ;
renameDir(file) ;
long end = System.currentTimeMillis() ;
System.out.println("本次操作所花费的时间:" + (end - start));
}
public static void renameDir(File file) {
if (file.isDirectory()) { // 是一个目录
File results [] = file.listFiles() ; // 列出子目录中的内容
if (results != null) {
for (int x = 0 ; x < results.length ; x ++) {
renameDir(results[x]) ;
}
}
} else {
if (file.isFile()) { // 如果是文件则必须进行重命名
String fileName = null ;
if (file.getName().contains(".")) {
fileName = file.getName().substring(0,file.getName().lastIndexOf(".")) + ".txt" ;
} else {
fileName = file.getName() + ".txt" ;
}
File newFile = new File(file.getParentFile(),fileName) ; // 新的文件名称
file.renameTo(newFile) ; // 重命名
}
}
}
}
JavaAPIDemo
Java IO编程——File文件操作类的更多相关文章
- java学习笔记之IO编程—File文件操作类
1. File类说明 在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作( ...
- 高效IO之File文件操作类的基础用法(二)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 前言 众所周知Java提供File类,让我们对文件进行操作,下面就来简单整理了一 ...
- File 文件操作类 大全
File 文件操作类 大全 许多人都会对文件操作感到很难 我也是 但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴 等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦 ...
- java学习(九) —— java中的File文件操作及IO流概述
前言 流是干什么的:为了永久性的保存数据. IO流用来处理设备之间的数据传输(上传和下载文件) java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. java IO系统的学习, ...
- java IO流 Zip文件操作
一.简介 压缩流操作主要的三个类 ZipOutputStream.ZipFile.ZipInputStream ,经常可以看到各种压缩文件:zip.jar.GZ格式的压缩文件 二.ZipEntry ...
- java IO流 对文件操作的代码集合
Io流 按照分类 有两种分类 流向方向: 有输入流和输出流 按照操作类型有:字节流和字符流 按照流向方向 字节流的一些操作 //读文件 FileInputStream fis = new FileIn ...
- java io流 对文件操作
检查文件是否存在 获取文件路径 获取文件大小 ...... 更多参考手册 //对文件的操作 //检查文件是否存在 //获取文件路径 //获取文件大小 //文件是否可读 //文件是否可写 //.... ...
- JavaI/O编程---File文件操作
File类的基本使用 构造方法: public File (String pathname) public File(FIle parent,String child) 创建文件: public bo ...
- Java IO基础--File常用操作(递归)
File中经常会使用递归方法打印属性结构.统计文件夹下文件个数.子文件夹个数以及文件大小,可以作为递归的应用练习. 递归的写法,百度一搜一大堆,这里我使用对javabean方式封装了一下: packa ...
随机推荐
- 理解JavaScript中的this关键字
JavaScript中this关键字理解 在爬虫的过程中遇到了前端的js代码,对于this关键字理解的不是很清楚,所以写下这篇笔记,不足之处,希望得以改之. this的指向在函数定义的时候无法确定,只 ...
- 2018年秋招总结篇(Java)
博主开始找工作是10月10号,感觉可以出去找找工作,然后就去了,参加了多场面试.笔试,现在总结一下 1.笔试篇 String StringBuffer StringBuilder的区别? HashMa ...
- dom4j.jar下载
下载地址: 链接:https://pan.baidu.com/s/16GCgCpaF7dc33pMbK2sTLg 密码:z444
- CF #579 (Div. 3) E.Boxers
E.Boxers time limit per test2 seconds memory limit per test256 megabytes inputstdin outputstdout The ...
- Jetpack系列:LiveData入门级使用方法
Android APP开发中,开发者们都想有一个公共的组件,可以实现后台数据的监听,同时实时更新到UI进行显示,从而大大简化开发过程.Google针对这一开发需求,提供了Jetpack LiveDat ...
- uni-app实现滑动切换效果
在对于uni-app框架了解之后,今天就实现一个滚动切换tab效果,这个很常见的一个效果,最后封装成一个组件,便于以后使用,写这个需要引入uni官方提供的uni.css样式,用到了写好的样式,就不需要 ...
- Maven 梳理-安装配置
项目构建过程包括[清理项目]→[编译项目]→[测试项目]→[生成测试报告]→[打包项目]→[部署项目]这几个步骤,这六个步骤就是一个项目的完整构建过程. 下载后解压 配置环境变量 F:\jtDev ...
- 讨论c/c++计算小数的精度问题
求出所有100以下整数与一位小数相乘等于相加的浮点数这个有Bug浮点数计算时精度会出现误差 除非使用非常精确的类型或限制浮点的位数 比如 #include <iostream> int m ...
- 【SQL server基础】SQL视图加密,永久隐藏视图定义的文本
SQL可以对视图进行加密.也就是,可永久隐藏视图定义的文本. 注意 此操作不可逆.加密视图后,无法再修改它,因为无法再看到视图定义.如果需要修改加密视图,则必须删除它并重新创建另一个视图. 示例代 ...
- 认识MongoDB复制集
从这一篇开始,我们要踏上MongoDB进阶之路啦,想想还有点小开心呢.一筐猪镇楼. 引入复制集 我们先来想一个场景,如果本地项目使用MongoDB,都是下载,安装,连接一条龙服务.这实际也就是 ...