一.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. hdu4734 F(x)(数位dp)

    题目传送门 F(x) Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. AJAX 获取Servlet文件路径

    下面均不行: xmlRes.open("get","edu/hust/ajax/TestServlet",true); xmlRes.open("ge ...

  3. linux的各种安装配置和编译首页

    VMware与Centos系统安装 https://www.cnblogs.com/LLBFWH/articles/10991478.html centos7安装python3 以及tab补全功能 h ...

  4. NGUI的拖拽和放下功能的制作,简易背包系统功能(drag and drop item)

    一我们添加sprite,给sprite添加背景图片和添加box collider,但是drag and drop item在attach中是找不到的只能在add component中查找添加,如下图: ...

  5. 使用transporter同步MongoDB数据到es

    由于logstash不支持MongoDB自定义主键导入es,所以使用transporter导入数据. 版本:es5.x,transporter0.25, es6以上不允许一个索引下面多个type,tr ...

  6. linux性能分析工具Sysstat

  7. 再读js正则表达式

    正则表达式定义 在js中有两种方式来定义正则表达式, 第一种是类似perl的语法来定义一个正则表达式,我们把它叫做正则表达式字面量法: var expression = /pattern/flag 其 ...

  8. jenkins持续集成(一): 在Linux下的安装与配置

    撸了今年阿里.网易和美团的面试,我有一个重要发现.......>>> 前提: 安装了JDK,并配置好环境变量:JAVA_HOME 安装了Maven,并配置好环境变量:MAVEN_HO ...

  9. js-ifelse-奇技淫巧

    我们有A,B,C,D四个不同的类别,在最开始的时候只有三个类别,并且两个类别是做同样的事: function categoryHandle(category) { if(category !== 'A ...

  10. 【LeetCode 96】不同的二叉搜索树

    题目链接 [题解] 我们可以枚举这棵树的根节点在i处. 现在问题就变成. 1..i-1这i-1个节点组成的树和i+1..n这n-i个节点组成的树的个数的问题了. 假设他们俩的结果分别是cnt1和cnt ...