在上一章博客中简单的介绍了Java IO流的一些特征。也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起。

File类的描述:File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。即Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件或者目录只要创建File这个类即可。

不过要注意的是File类只是对文件的操作类,只能对文件本身进行操作,不能对文件内容进行操作。


1、File类的属性(字段)

从上图的API可以发现File中包括两种分隔符,路径分隔符和名称分隔符,而且分别还有两种形式Char型和String型。其中

File.pathSeparator 指的是分隔连续多个路径字符串的分隔符。在UNIX系统上,这个字符是’:’ ; 在Microsoft Windows系统上是’;’ 。

File.separator 指的是用来分隔同一个路径字符串中的目录的分隔符。在UNIX系统上,该字段的值为’/’; 在Microsoft Windows系统上是’\’ 。

我们都知道由于不同的操作系统之间会导致分隔符的不同,所以使用它们的作用主要就是屏蔽各个平台之间的分隔符差异。

    //在Windows系统下输出
System.out.println(File.pathSeparator);// 输出;
System.out.println(File.separator);// 输出\
    //简单测试一下,调用的方法后面会讲
File file1 = new File("D:\\IO\\hello.txt");//这里两个\\是Java中的转义字符
File file2 = new File("D:"+File.separator+"IO"+File.separator+"hello.txt");
System.out.println(file1.getAbsolutePath());
System.out.println(file2.getAbsolutePath());

输出的结果都是:D:\IO\hello.txt

2、File类的构造方法

上图的构造方法使用举例如下:

package com.thr;

import java.io.File;

/**
* @author Administrator
* @date 2020-02-20
* @desc File构造方法举例
*/
public class Demo {
public static void main(String[] args) { //File(String parent, String child)
//从父路径名字符串和子路径名字符串创建新的File实例。
File f1 = new File("D:","IO\\hello.txt");
System.out.println(f1); //输出 D:\IO\hello.txt //File(String pathname)
//通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
//不用Java分隔符
File f2=new File("D:\\IO\\hello.txt");
//使用Java分隔符
File f3 = new File("D:"+File.separator+"IO"+File.separator+"hello.txt");
System.out.println(f2); //输出 D:\IO\hello.txt
System.out.println(f3); //输出 D:\IO\hello.txt //File(File parent, String child)
//从父抽象路径名和子路径名字符串创建新的 File实例。
File f4 = new File("D:");
File f5 = new File(f4,"IO\\hello.txt");
System.out.println(f5); //输出 D:\IO\hello.txt
}
}

3、File类的常用方法


①.获取文件的相关信息:

  • String getAbsolutePath() :获取绝对路径名字符串。
  • String getName():获取文件或目录的名称。
  • String getPath():获取路径名字符串。
  • String getParent() :获取路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
  • Long lastModified():获取最后一次修改的时间(返回毫秒)。
  • Long length():获取文件的长度,如果表示目录则返回值未指定。

以上方法测试的代码如下【测试以自己的电脑文件夹为准】:

package com.thr;

import java.io.File;
import java.io.IOException; /**
* @author Administrator
* @date 2020-02-20
* @desc File常用方法举例
*/
public class Demo1 {
public static void main(String[] args) { //路径带文件
File f1 = new File("D:\\IO\\hello.txt");
System.out.println("文件绝对路径:"+f1.getAbsolutePath());
System.out.println("文件名称:"+f1.getName());
System.out.println("文件路径(字符串):"+f1.getPath());
System.out.println("文件父路径:"+f1.getParent());
System.out.println("文件最后修改时间(ms):"+f1.lastModified());
System.out.println("文件长度:"+f1.length());
System.out.println("------------");
//路径不带文件,纯目录
File f2 = new File("D:\\IO");
System.out.println("目录绝对路径:"+f2.getAbsolutePath());
System.out.println("目录名称:"+f2.getName());
System.out.println("目录路径(字符串):"+f2.getPath());
System.out.println("目录父路径:"+f2.getParent());
System.out.println("目录最后修改时间(ms):"+f2.lastModified());
System.out.println("目录长度:"+f2.length());
}
}
运行结果:
文件绝对路径:D:\IO\hello.txt
文件名称:hello.txt
文件路径(字符串):D:\IO\hello.txt
文件父路径:D:\IO
文件最后修改时间(ms):1582207195168
文件长度:9
------------
目录绝对路径:D:\IO
目录名称:IO
目录路径(字符串):D:\IO
目录父路径:D:\
目录最后修改时间(ms):1582206503515
目录长度:0

注意:绝对路径和相对路径的区别

绝对路径:是一个完整的路径,以盘符开头,例如 D://IO//hello.txt。
   相对路径:是相较于当前路径,不以盘符开头,例如 //hello.txt。

②、判断功能

  • Boolean isDirectory():判断此路径是否为一个目录
  • Boolean isFile():判断是否为一个文件
  • Boolean exists():判断文件或目录是否存在
  • Boolean canExecute():判断文件是否可执行
  • Boolean canRead():判断文件是否可读
  • Boolean canWrite():判断文件是否可写
  • Boolean isHidden():判断是否为隐藏文件

以上方法测试的代码如下:

package com.thr;

import java.io.File;
import java.io.IOException; /**
* @author Administrator
* @date 2020-02-20
* @desc File常用方法举例
*/
public class Demo2 {
public static void main(String[] args) throws IOException { File f1 = new File("D:\\IO\\hello.txt");
//路径带文件
System.out.println("是否为目录:"+f1.isDirectory());
System.out.println("是否为文件"+f1.isFile());
System.out.println("是否存在"+f1.exists());
System.out.println("是否可执行"+f1.canExecute());
System.out.println("是否可读"+f1.canRead());
System.out.println("是否可写"+f1.canWrite());
System.out.println("是否隐藏"+f1.isHidden());
System.out.println("------------");
File f2 = new File("D:\\IO");
//路径不带文件,纯目录
System.out.println("是否为目录:"+f2.isDirectory());
System.out.println("是否为文件"+f2.isFile());
System.out.println("是否存在"+f2.exists());
System.out.println("是否可执行"+f2.canExecute());
System.out.println("是否可读"+f2.canRead());
System.out.println("是否可写"+f2.canWrite());
System.out.println("是否隐藏"+f2.isHidden());
}
}

③、新建和删除

  • Boolean createNewFile():创建文件,如果文件存在则不创建,返回false,反之返回true。
  • Boolean mkdir():创建文件目录。如果此文件目录存在则不创建,如果此文件目录的上层目录不存在也不创建。
  • Boolean mkdirs(): 创建文件目录。如果上层文件目录不存在也会创建。
  • Boolean delete():删除的文件或目录。如果目录下有文件或目录则不会删除。

以上方法测试的代码如下:

package com.thr;

import java.io.File;
import java.io.IOException; /**
* @author Administrator
* @date 2020-02-20
* @desc File常用方法举例
*/
public class Demo3 {
public static void main(String[] args) throws IOException { //创建文件
File f1 = new File("D:\\IO\\hi.txt");
if (!f1.exists()) {
f1.createNewFile();
System.out.println("创建成功...");
}else{
System.out.println("创建失败...");
} //mkdir创建文件目录,目标目录不存在,上层目录存在
File f2 = new File("D:\\IO\\IO1");
boolean mkdir = f2.mkdir();
if (mkdir){
System.out.println("创建目录成功...");
}else{
System.out.println("创建目录失败...");
} //mkdirs创建文件目录,上层目录不存在存在
File f3 = new File("D:\\IO1\\IO1");
boolean mkdirs = f3.mkdirs();
if (mkdirs){
System.out.println("创建目录成功...");
}else{
System.out.println("创建目录失败...");
} //删除文件或目录
/* boolean delete = f1.delete();
System.out.println(delete);
boolean delete1 = f2.delete();
System.out.println(delete1);
boolean delete2 = f3.delete();
System.out.println(delete2);*/
}
}

④、文件的获取:

  • String[] list():返回一个字符串数组,获取指定目录下的所有文件或者目录名称的数组。
  • File[] listFiles():返回一个抽象路径名数组,获取指定目录下的所有文件或者目录的File数组。

以上方法测试的代码如下:为了方便测试我在IO目录下添加了其他目录。

package com.thr;

import java.io.File;
import java.io.IOException; /**
* @author Administrator
* @date 2020-02-20
* @desc File常用方法举例
*/
public class Demo4 {
public static void main(String[] args) { File file = new File("D:\\IO"); //list()方法
String[] list = file.list();
for (String s : list) {
System.out.println(s);
}
System.out.println("----------");
//listFiles()方法
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.toString());
}
}
}
运行结果:
hello.txt
hi.txt
IO1
IO2
IO3
IO4
IO5
IO6
----------
D:\IO\hello.txt
D:\IO\hi.txt
D:\IO\IO1
D:\IO\IO2
D:\IO\IO3
D:\IO\IO4
D:\IO\IO5
D:\IO\IO6

⑤、重命名文件:

  • Boolean renameTo(File dest):把文件重命名到指定路径。

注意:要使用这个方法其原文件(即TXT文件或其它文件)一定要存在,而且指定路径不能存在与重命名名字相同的文件,否则永远返回false。

package com.thr;

import java.io.File;

/**
* @author Administrator
* @date 2020-02-20
* @desc renameTo方法测试
*/
public class Demo5 {
public static void main(String[] args) { File file1 = new File("D:\\IO\\hello.txt");
File file2 = new File("D:\\test\\hi.txt");
boolean renameTo = file1.renameTo(file2);
System.out.println(renameTo);
}
}

最新文章

  1. DDD开发框架ABP之本地化资源的数据库存储扩展
  2. Ubuntu使用阿里云软件源
  3. seo查询命令
  4. Android多线程
  5. MVC中几种常用ActionResult
  6. MySQL Workbench返回所有的记录
  7. Android Library Project 使用问题总结
  8. 爷爷辈儿的AX
  9. 从一个Fragment跳转到另一个Fragment
  10. oracle中如何对字符串进行去除空格的方法
  11. STM8s在利用库配置端口的小问题
  12. cat ,more, Less区别
  13. iOS 极光推送
  14. lesson6:java线程中断
  15. tp中u方法的使用
  16. Windows下使用TensorFlow
  17. maven项目启动
  18. VSTO学习笔记(十五)Office 2013 初体验
  19. input中的name,value以及label中的for
  20. PHP迭代与递归实现无限级分类

热门文章

  1. AC3 channel coupling
  2. [USACO13JAN]Cow Lineup
  3. 《绘图前设置:像素格式——PIXELFORMATDESCRIPT、设备上下文、渲染上下文》
  4. codeforces 962F.simple cycle(tarjan/点双连通分量)
  5. 8.10-Day1T1-数字(number)
  6. Window下cmd查看目录结构
  7. VIM - ex 命令行的窗口切换
  8. layui+ajax+select
  9. Codeforces Round #577 (Div. 2) 题解
  10. 用Python给头像加上圣诞帽或圣诞老人小徽章