在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一 一个与文件本身操作(创建、删除、重命名等)有关的类,而如果要想进行File类的操作,必须要提供有完整的路径,而后可以调用相应的方法进行处理。

1. File类的基本使用

打开JDK文档可以发现,File类时Comparable接口的子类,所以File类的对象是可以进行排序处理的。在进行File类处理的时候需要为其设置访问路径,那么对于路径的配置主要通过File类的构造方法处理:

  1. 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)

  1. import java.io.File;
  2. public class JavaAPIDemo {
  3. public static void main(String[] args) throws Exception {
  4. File file = new File("d:\\mldn.txt");
  5. if (file.exists()) {
  6. file.delete();// 删除文件
  7. } else { // 文件不存在
  8. System.out.println(file.createNewFile()); // 创建新的文件
  9. }
  10. }
  11. }

JavaAPIDemo

通过代码可以发现,File类实现的就是文件本身的处理。


2. File类操作深入

1、在实际的软件项目开发和运行的过程之中,往往都会在Windows中进行项目的开发,而在项目部署的时候基于Linux或Unix系统来进行项目发布以保证生产环节的安全性;

在不同的操作系统之中会存在有不同的路径分隔符:Windows分隔符“\”、Linux分隔符"/",所以在最初进行开发的时候就必须考虑不同系统环境下的分隔符的问题,所以为了解决此问题,File类提供有一个常量:public static final String separator

范例:正常的路径编写

  1. File file = new File("d:" + File.separator + "mldn.txt");

  但是随着系统的适应性的不断加强,对于当前的路径操作,也可以随意使用了。

  1. File file = new File("d:/mldn.txt");
  1. //完整代码
  2. import java.io.File;
  3. public class JavaAPIDemo {
  4. public static void main(String[] args) throws Exception {
  5. File file = new File("d:" + File.separator + "mldn.txt");
  6. if (file.exists()) {
  7. file.delete();// 删除文件
  8. } else { // 文件不存在
  9. System.out.println(file.createNewFile()); // 创建新的文件
  10. }
  11. }
  12. }

JavaAPIDemo

2、在进行文件创建的时候有一个重要的前提:文件的父路径必须首先存在。

·如何获取父路径:public File getParentFile​();

·创建多级目录:public boolean mkdirs​();

  1. import java.io.File;
  2. public class JavaAPIDemo {
  3. public static void main(String[] args) throws Exception {
  4. File file = new File("d:" + File.separator + "hello" + File.separator + "demo" + File.separator + "message"
  5. + File.separator + "pluto.txt");
  6. if (!file.getParentFile().exists()) { // 父路径不存在
  7. file.getParentFile().mkdirs() ; // 创建父路径
  8. }
  9. if (file.exists()) {
  10. file.delete();// 删除文件
  11. } else { // 文件不存在
  12. System.out.println(file.createNewFile()); // 创建新的文件
  13. }
  14. }
  15. }

JavaAPIDemo

注:这种判断并且建立父目录的操作在很多的情况下可能只需要一次,但是如果将这个判断一直都停留在代码里面,那么就会造成时间复杂度的提升,所以这个时候如果要想提升性能,请先保证目录以及创建。

3. 获取文件信息

除了可以进行文件的操作之外也可以通过File类来获取一些文件本身提供的信息,可以获取如下内容:

·文件是否可读:public boolean canRead​();

·文件是否可写:public boolean canWrite​();

·获取文件长度:public long length​(),该方法返回的是long数据类型、字节长度;

·最后一次修改日期时间:public long lastModified​();

·判断是否为目录:public boolean isDirectory​();

·判断是否为文件:public boolean isFile​();

  1. //my.jpg可以修改为该盘的任一个文件,须带上后缀名
  2. import java.io.File;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. class MathUtil {//将字节Bytes数目转换为MB
  6. private MathUtil() {
  7. }
  8.  
  9. public static double round(double num, int scale) {
  10. return Math.round(Math.pow(10, scale) * num) / Math.pow(10, scale);
  11. }
  12. }
  13. public class JavaAPIDemo {
  14. public static void main(String[] args) throws Exception {
  15. File file = new File("d:" + File.separator + "my.jpg");
  16. System.out.println("文件是否可读:" + file.canRead());
  17. System.out.println("文件是否可写:" + file.canWrite());
  18. System.out.println("文件大小:" + MathUtil.round(file.length() / (double) 1024 / 1024, 2));
  19. System.out.println(
  20. "最后的修改时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
  21. System.out.println("是目录吗?" + file.isDirectory());
  22. System.out.println("是文件吗?" + file.isFile());
  23. }
  24. }

JavaAPIDemo

既然可以判断给定的路径是文件还是目录,那么就可以进一步的判断,如果发现是目录,则应该列出目录中的全部内容:

·列出目录内容:public File[] listFiles​();

  1. import java.io.File;
  2. public class JavaAPIDemo {
  3. public static void main(String[] args) throws Exception {
  4. File file = new File("d:" + File.separator);
  5. if (file.isDirectory()) { // 当前是一个目录
  6. File result [] = file.listFiles() ; // 列出目录中的全部内容
  7. for (int x = 0 ; x < result.length ; x ++) {
  8. System.out.println(result[x]);
  9. }
  10. }
  11. }
  12. }

JavaAPIDemo

这些信息的获得都是文件或目录本身的操作,都是不涉及到文件内容处理的。

4. File操作案例:列出指定目录中的全部文件

由开发者任意设置一个目录的路径,而后将这个目录中所有的文件的信息全部列出,包括子目录中的所有文件,在这样的处理情况下最好的做法就是利用递归的形式来完成。

范例:列出指定目录的全部文件

  1. import java.io.File;
  2. public class JavaAPIDemo {
  3. public static void main(String[] args) throws Exception {
  4. File file = new File("D:" + File.separator) ; // 是一个目录
  5. long start = System.currentTimeMillis();
  6. listDir(file) ;
  7. long end = System.currentTimeMillis();
  8. System.out.println("时间是:"+(end-start));
  9. }
  10. public static void listDir(File file) {
  11. if (file.isDirectory()) { // 是一个目录
  12. File results [] = file.listFiles() ; // 列出目录中的全部内容
  13. if (results != null) {
  14. for (int x = 0 ; x < results.length ; x ++) {
  15. listDir(results[x]) ; // 继续依次判断
  16. }
  17. }
  18. }
  19. System.out.println(file); // 获得完整路径
  20. }
  21. }

JavaAPIDemo

如果现在将路径输出变为删除操作,那么就彻底删除路径。

  1. //慎重,小心使用 mldnjava问目录,若该目录不存在,也可以使用改盘的其他文件夹
  2. import java.io.File;
  3. public class JavaAPIDemo {
  4. public static void main(String[] args) throws Exception {
  5. File file = new File("D:" + File.separator + "mldnjava") ; // 是一个目录
  6. listDir(file) ;
  7. }
  8. public static void listDir(File file) {
  9. if (file.isDirectory()) { // 是一个目录
  10. File results [] = file.listFiles() ; // 列出目录中的全部内容
  11. if (results != null) {
  12. for (int x = 0 ; x < results.length ; x ++) {
  13. listDir(results[x]) ; // 继续依次判断
  14. }
  15. }
  16. }
  17. file.delete() ;
  18. }
  19. }

JavaAPIDemo

5. File操作案例:批量修改文件名称

编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀修改为.txt。

·对于这些的操作必须设置一些假设的约定,能够重命名的文件都是有后缀的,如果没有后缀的路径,则为其追加路径,如果有后缀的路径,则必须以最后一个“.”进行截取。

  1. import java.io.File;
  2. public class JavaAPIDemo {
  3. public static void main(String[] args) throws Exception {
  4. File file = new File("D:" + File.separator + "test") ; // 是一个目录
  5. long start = System.currentTimeMillis() ;
  6. renameDir(file) ;
  7. long end = System.currentTimeMillis() ;
  8. System.out.println("本次操作所花费的时间:" + (end - start));
  9. }
  10. public static void renameDir(File file) {
  11. if (file.isDirectory()) { // 是一个目录
  12. File results [] = file.listFiles() ; // 列出子目录中的内容
  13. if (results != null) {
  14. for (int x = 0 ; x < results.length ; x ++) {
  15. renameDir(results[x]) ;
  16. }
  17. }
  18. } else {
  19. if (file.isFile()) { // 如果是文件则必须进行重命名
  20. String fileName = null ;
  21. if (file.getName().contains(".")) {
  22. fileName = file.getName().substring(0,file.getName().lastIndexOf(".")) + ".txt" ;
  23. } else {
  24. fileName = file.getName() + ".txt" ;
  25. }
  26. File newFile = new File(file.getParentFile(),fileName) ; // 新的文件名称
  27. file.renameTo(newFile) ; // 重命名
  28. }
  29. }
  30. }
  31. }

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. Eclipse通过SVN导入项目遇到的问题记录

    问题一.把子项目导入为project 原因:一个大的文件夹,里面有各个小项目,需要把自己添加需求的醒目导入为Maven Project 1.右键选 Import as project 2.右键 -&g ...

  2. 第八届蓝桥杯java b组第八题

    ,标题:包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就 ...

  3. 使用 .gitignore 忽略 Git 仓库中的文件

    .gitignore 在Git中,很多时候你只想将代码提交到仓库,而不是将当前文件目录下的文件全部提交到Git仓库中,例如在MacOS系统下面的.DS_Store文件,或者是Xocde的操作记录,又或 ...

  4. MongoDB的复制源oplog

    ​ 之前有说过MongoDB的复制是异步复制的,其实也就是通过oplog来实现的,他存放在local数据库中,我们来查询一下主节点的日志大小. ​ 除了主节点有oplog之外,其他节点也就有oplog ...

  5. 无法访问hadoop102:50070

    ~~~瞎忙了好久好久~~~ 第一次弄Hadoop完全式配置,全部跟着教程把操作做完之后,来到本机运行hadoop102:50070无法访问.... 以为是自己配错了就开始玩起了“找不同”游戏,玩得差不 ...

  6. 生产环境项目问题记录系列(二):Docker打包镜像Nuget包因权限问题还原失败

    docker打包镜像遇到一个因为nuget权限验证问题导致镜像打包失败的问题,公司Nuget包用的是tfs管理的,tfs有权限验证,结果导致nuget还原失败,原有的NuGet.config文件如下: ...

  7. TensorFlow2.0(四):填充与复制

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  8. 死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  9. charles抓包小程序

    charles抓包小程序: 原理呢,简单理解,通过charles开代理,然后手工wifi设置代理上网. 但是要做一些准备:手机要安装charles 证书. 注意的是安卓和ios有区别:目前安卓7.0版 ...

  10. A-06 最小角回归法

    目录 最小角回归法 一.举例 二.最小角回归法优缺点 2.1 优点 2.2 缺点 三.小结 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等 ...