在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文件操作类的更多相关文章

  1. java学习笔记之IO编程—File文件操作类

    1. File类说明 在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作( ...

  2. 高效IO之File文件操作类的基础用法(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 前言 众所周知Java提供File类,让我们对文件进行操作,下面就来简单整理了一 ...

  3. File 文件操作类 大全

    File  文件操作类  大全 许多人都会对文件操作感到很难  我也是  但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴  等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦   ...

  4. java学习(九) —— java中的File文件操作及IO流概述

    前言 流是干什么的:为了永久性的保存数据. IO流用来处理设备之间的数据传输(上传和下载文件) java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. java IO系统的学习, ...

  5. java IO流 Zip文件操作

    一.简介 压缩流操作主要的三个类 ZipOutputStream.ZipFile.ZipInputStream ,经常可以看到各种压缩文件:zip.jar.GZ格式的压缩文件 二.ZipEntry   ...

  6. java IO流 对文件操作的代码集合

    Io流 按照分类 有两种分类 流向方向: 有输入流和输出流 按照操作类型有:字节流和字符流 按照流向方向 字节流的一些操作 //读文件 FileInputStream fis = new FileIn ...

  7. java io流 对文件操作

    检查文件是否存在 获取文件路径 获取文件大小 ...... 更多参考手册 //对文件的操作 //检查文件是否存在 //获取文件路径 //获取文件大小 //文件是否可读 //文件是否可写 //.... ...

  8. JavaI/O编程---File文件操作

    File类的基本使用 构造方法: public File (String pathname) public File(FIle parent,String child) 创建文件: public bo ...

  9. Java IO基础--File常用操作(递归)

    File中经常会使用递归方法打印属性结构.统计文件夹下文件个数.子文件夹个数以及文件大小,可以作为递归的应用练习. 递归的写法,百度一搜一大堆,这里我使用对javabean方式封装了一下: packa ...

随机推荐

  1. Django-中间件-csrf扩展请求伪造拦截中间件-Django Auth模块使用-效仿 django 中间件配置实现功能插拔式效果-09

    目录 昨日补充:将自己写的 login_auth 装饰装在 CBV 上 django 中间件 django 请求生命周期 ***** 默认中间件及其大概方法组成 中间件的执行顺序 自定义中间件探究不同 ...

  2. jenkins上下游工程以及空间占用处理

    1.最近项目架构调整,把十几个java项目整合为一个大的项目,这样构建上游工程成功后下游工程会自动构建 解决如下:取消这个勾选即可 2.构建单个项目时,会把所有子工程都打包一次 解决如下:指定构建时的 ...

  3. Django之choices选项和富文本编辑器的使用

    项目准备 1.创建数据库 create database choices_test default charset utf8; 2.创建一个名为 choices_test 的Django项目: 3.创 ...

  4. WinServer 2012 R2 安装python3.6时出现错误:0x80240017 导致安装失败

    解决方法: 依次检查并更新补丁:KB2919442,KB2919355,kb2999226 KB2919442:https://www.microsoft.com/zh-cn/download/det ...

  5. event.stopPropagation()、event.preventDefault()与return false的区别

    做小demo时经常用到return false来取消默认事件,但一直不是很懂它和preventDefault()等的区别,今天查了查文档和大神们的博客,在这里对相关知识点做一个总结 首先开门见山,总结 ...

  6. Python IAQ中文版 - Python中少有人回答的问题

    Python中少有人回答的问题 The Python IAQ: Infrequently Answered Questions 1 Q: 什么是"少有人回答的问题(Infrequently ...

  7. Java 学习笔记之 Synchronized锁对象

    Synchronized锁对象: Synchronized取得的锁都是对象锁,而不是把一段代码或方法当作锁,哪个线程执行带synchronized关键字的方法,哪个线程就持有该方法所属对象的锁,那么其 ...

  8. Java-Thread00之多线程知识准备

    ------ ![](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170014292-1661101986.jpg) ...

  9. DrawerLayout(抽屉效果)

    DrawerLayout是V4包下提供的一种左滑右滑抽屉布局效果. 实现效果如下: 因为是官方提供的,所以使用起来也相对的比较简单. DrawerLayout 提供 1.当界面弹出的时候,主要内容区会 ...

  10. JavaScript中闭包的使用和各种继承介绍

    一.什么是闭包?     (1)闭包的概念:a.闭包就是函数嵌套时,让局部变量变成自由变量的环境,是一种让局部变量进化的方式.                 b.定义在一个函数内部的函数.      ...