一.File文件操作类

  在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创建,删除,重命名)有关的类,而如果想要进行File类的操作,我们需要提供有完整的路径支持,而后可以调用相应的方法进行处理
--打开JDK的文档,可以发现File类是Comparable接口的子类,所以File类对象是可以进行排序处理的(Windows系统可以将文件根据创建日期,文件名,大小来进行排序).而进行File类处理的时候,我们需要为其设置访问路径,那么对于路径的配置,主要通过构造方法来进行处理:

File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri)
通过将给定的 file: URI转换为抽象路径名来创建新的 File实例

--范例:使用File类常见一个文件:

 public class MyFileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\demo1.txt");
//如果现在想要进行文件的基本操作,可以使用如下的基本方法:
/* 1.public boolean createNewFile()throws IOException 创建新文件
(true,文件不存在,成功创建,false,文件已经存在,创建失败)*/
/*2.判断文件是存在: public boolean exists()*/
/*3.public boolean delete()删除当前文件*/
if (file.exists()) {
System.out.println("当前文件已经存在,首先删除当前文件");
System.out.println(file.delete() ? "删除文件成功" : "删除文件失败");
}
System.out.println(file.createNewFile() ? "创建文件成功" : "创建文件失败");
}
}

--可以发现File类实现的就是文件本身的的处理,文件内容的处理并不属于File类的范畴
二.File类的深入操作

  现在已经实现文件的基础操作,但是对于这个操作是存在一些问题的,对代码进行优化处理:
--在实际的软件项目开发和运行过程中,往往都会在Windows系统中进行项目的开发,而在项目部署的时候通常会在Linux系统中进行发布部署,以保证项目发布的安全性;
  在不用的操作系统之中,会存在不同的路径分隔符:Windows分隔符"\",Linux分隔符"/",所以正最初进行开发的时候,就必须考虑不同系统环境下的分隔符的问题,因此为了解决这一问题,Flie类提供有一个常量:public static final String separator;(这是历史版本遗留的分隔符静态常量,变量名为小写)
--范例:正常的路径编写:  

 public class MyFileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:" + File.separator + "demo1java.txt");
//如果现在想要进行文件的基本操作,可以使用如下的基本方法:
/* 1.public boolean createNewFile()throws IOException 创建新文件
(true,文件不存在,成功创建,false,文件已经存在,创建失败)*/
/*2.判断文件是存在: public boolean exists()*/
/*3.public boolean delete()删除当前文件*/
if (file.exists()) {
System.out.println("当前文件已经存在,首先删除当前文件");
System.out.println(file.delete() ? "删除文件成功" : "删除文件失败");
}
System.out.println(file.createNewFile() ? "创建文件成功" : "创建文件失败");
}
}

--但是随着系统的适应性的不断加强,对于当前的路径操作,也可以使用随意使用了,无关"/","\",但是对于标准来讲,更建议使用这个常量
--在使用Flies类进行文件处理的时候,需要注意的是,程序的主要操作流程:程序-->JVM-->操作系统函数-->文件处理,所以进行同一文件的删除和创建操作时,会出现短暂的延迟,因此在非比较情况下不建议进行重名的文件处理
--在进行文件创建的时候,有一个重要的前提:文件的父路径必须首先存在:

 public class MyFileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:" + File.separator + "java_test"
+ File.separator + "java_demo" + File.separator + "demo1java.txt");
//如果现在想要进行文件的基本操作,可以使用如下的基本方法:
/* 1.public boolean createNewFile()throws IOException 创建新文件
(true,文件不存在,成功创建,false,文件已经存在,创建失败)*/
/*2.判断文件是存在: public boolean exists()*/
/*3.public boolean delete()删除当前文件*/
/*4.获取父路径getParentFile public File getParentFile() */
/*5.创建目录:
* public boolean mkdir()创建单个目录
* public boolean mkdirs()创建多个目录*/
if(!file.getParentFile().exists()){ //父路径不存在
System.out.println(file.getParentFile().mkdirs()?"创建父路径成功":"创建父路径失败"); //创建父路径
}
System.out.println(file.createNewFile()?"创建文件成功":"创建文件失败");
}
}

--这种判断并建立父路径的操作,在很多情况下可能只要一次,但是如果将这个判断一直都停留在代码中,将会导致时间复杂度的提升,如果要想提升性能,请先保证目录已经创建,从而逐步提升性能
三.文件信息获取

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

 class MathUtil {
private MathUtil() {
} /**
* 实现四舍五入操作
*
* @param num 当前的数字信息
* @param scale 要保留的小数位数
* @return 四舍五入的结果
*/
public static double round(double num, int scale) {
return Math.round(Math.pow(10, scale) * num) / Math.pow(10, scale);
}
} public class MyFileTest {
public static void main(String[] args) {
//文件是否可读:boolean canRead()
//文件是否可写:boolean canWrite()
File file = new File("d:" + File.separator + "java_test" + File.separator + "my.png");
System.out.println("文件是否可读: " + file.canRead());
System.out.println("文件是否可写: " + file.canWrite());
//获取文件的长度long length() 即获取文件大小
System.out.println("文件大小: " + MathUtil.round(file.length() / (double) 1024 / 1024, 2) + "Mb");
//获取文件的最后一次修改的日期时间 long lastModified()
System.out.println("最后的修改时间: " +
new SimpleDateFormat("yyyy-MM-dd HH:mm:sss").format(new Date(file.lastModified())));
//查看该文件是否为目录boolean isDirectory()
//查看该文件是否为文件boolean isFile()
System.out.println("查看是否为目录: " + file.isDirectory());
System.out.println("查看是否为文件: " + file.isFile()); //我们发现既然可以判断还是否为目录,那么是否可以在判断是目录之后返回该目录下的所有子目录以及目录文件呢
System.out.println("========列出目录内容========");
//列出目录内容 public File[] listFiles();
File directory = new File("F:" + File.separator + "idea_workspace");
if(directory.isDirectory()){ //判断当前这是一个目录
File[] files = directory.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
}

--这些新的获得都是文件或目录本身的操作,都不设计到文件内容的处理
--范例:列出指定目录的全部文件:

 public class ListAllFileDemo {
public static void main(String[] args) {
//设置任意一个目录的路径,而后将这个目录中所有文件的信息都进行打印输出处理
//可以采用递归的方法来实现
Scanner scanner = new Scanner(System.in);
String dir = scanner.next();
File file = new File(dir);
if (!file.isDirectory()) {
System.out.println("当前输入的路径并不是一个文件夹路径");
} else {
listDir(file, 1);
}
} /**
* 列出当前输入文件目录的所有文件列表
*
* @param file 当前的文件夹路径
* @param index 请输入1
*/
public static void listDir(File file, int index) {
File thisFile = file; //当前的文件路径
StringBuilder tab = new StringBuilder(); //间隔处理符
File[] files = thisFile.listFiles();
for (int i = 0; i < index - 1; i++) {
tab.append(" ");
}
for (File f : files) {
System.out.println(tab.toString() + f);
if (f.isDirectory()) {
listDir(f, index++);
}
}
}
}

--范例:批量修改文件名称

 public class MyModifyFileNameDemo {
public static void main(String[] args) {
/*程序运行时输入目录名称,并把该目录下的所有文件名后缀修改为txt*/
//文件的路径必须以最后一个.为止
//如果存在后缀,则为修改,否则为追加
Scanner scanner = new Scanner(System.in);
System.out.println("请输入目录名称:");
renameDir(new File(scanner.next()));
} public static void renameDir(File file) {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
renameDir(f);
}
} else {
File parentFile = file.getParentFile();
String name = file.getName();
if (name.contains(".")) {
name = name.substring(0, name.lastIndexOf(".")) + ".txt";
} else {
name = name + ".txt";
}
System.out.println(name);
}
}
}

javaIO流(一)--File类的基本使用的更多相关文章

  1. IO流,File类的测试........课堂加总结

    package liu0926; import java.io.File; import java.io.IOException; public class Text01 { public stati ...

  2. IO流(File类,IO流的分类,字节流和字符流,转换流,缓冲流,对象序列化)

    1.File类 File类可以在程序中 操作文件和目录.File类是通过建立File类对象,在调用File类的对象来进行相关操作的. 示例: public class Demo01 { public  ...

  3. java基础之-I/O流和File类解析

    在日常的java开发中少不了文件的读取和 写入,这就涉及到文件的I/O操作,今天就来总结下文件的IO操作,顺便文件的IO操作也需要File了的帮助,所以一起总结了. 以下图片为我根据其他博客所总结的内 ...

  4. Java-IO流之File操作和Properties操作

    java的File类主要是用来操作文件的元数据,稍作演示如下: 其中方法getAllJavaFile()是使用了过滤器FileFileter,这个过滤器只需要实现accept方法,判断什么样的文件返回 ...

  5. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流

      File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...

  6. JAVASE(十六) IO流 :File类、节点流、缓冲流、转换流、编码集、对象流

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.File类型 1.1.File类的理解 File类是在java.io包下 File可以理解成一个文件 ...

  7. IO流(File类

    File类 三个构造方法 File(String filename)//模式和应用程序一个目录下 File(String directoryPath,String filename)//文件的绝对路径 ...

  8. 【Java IO流】File类的使用

    File类的使用 Java中的File类是在java.io.File中,Java.IO.File类表示文件或目录. File类只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. 一 ...

  9. java基础——IO流之File类

    1.File类的构造方法: File(String  pathName):通过一个指定的字符串类型路径来创建一个文件对象 File  (String parent,String child):通过指定 ...

随机推荐

  1. P3773 [CTSC2017]吉夫特

    传送门 看到组合数在模 $2$ 意义下的乘积,考虑用 $lucas$ 定理把组合数拆开 $lucas$ 告诉我们,$C(n,m)$ 在模 $k$ 意义下的值,相当于 $n,m$ 在 $k$ 进制下每一 ...

  2. UML 类图关系(继承,实现,依赖,关联,聚合,组合)

    1.继承(is-a)      指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能.并能够添加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中此类 ...

  3. 32.Group Anagrams(相同元素的不同组合)

    Level:   Medium 题目描述: Given an array of strings, group anagrams together. Example: Input: ["eat ...

  4. 【记录】elastiasearch 6.4.3 版本 SearchRequestBuilder字段排序,BoolQueryBuilder

    参考地址: 1:https://www.cnblogs.com/shoutn/p/8027960.html 2:https://www.jianshu.com/p/8402eb930ae7 3:htt ...

  5. CMS(1)

    一周后,终于可以学习到可爱的渗透了哈哈哈.除了大哥给的CMS(其实可以算是只是在文件上传的时候了解一下),但是对于一个CMS完整的渗透思路,我还是不懂.首先感谢章老师给我的CMS源码哈哈哈,在我的日记 ...

  6. 基本的bash shell

    一.linux文件系统 linux文件系统结构是从Unix文件结构演进过来的.在linux文件系统中,通用的目录名用于表示一些常见的功能.如下表列出一些较为常见的Linux顶层虚拟目录名及其内容. / ...

  7. 在Ubuntu上安装LAMP(Apache、Mysql、Php)

    原文地址:https://howtoubuntu.org/how-to-install-lamp-on-ubuntu Ubuntu有很多工具可以帮助我们一键配置LAMP环境,比如tasksel,但这些 ...

  8. 《深入学习Redis(2):持久化》笔记

    参考 https://www.cnblogs.com/kismetv/p/9137897.html 一.高可用概述 提供正常服务:主从分离,快速容灾技术,数据容量的扩展.数据安全不会丢失.    持久 ...

  9. win10搭建ftp环境

    1.进入程序,并点击“启用或关闭windows功能” 2.勾选对应的功能,并点击“确定” 3.进入IIS 4.如下图 5.如图 6.如图 7.如下图 8.创建新用户,用于登录ftp(自行创建) 9.禁 ...

  10. autoit3 脚本自动安装实例

    软件自动安装的相关实例!贴出来用于参考,并部分相关语法与示例 #RequireAdmin If DriveMapGet("T:")=="" Then Drive ...