在上一章博客中简单的介绍了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);
}
}

Java IO流详解(二)——File类的更多相关文章

  1. Java io流详解二

    原文地址https://www.cnblogs.com/xll1025/p/6418766.html 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间 ...

  2. 《Java基础知识》Java IO流详解

    Java IO概念 1. 用于设备之间的数据传输. 2. Java 将操作数据流的功能封装到了IO包中. 3. 数据流流向分:输入流和输出流,操作对象为文件. 4. 流按照操作数据分:字节流(通用)和 ...

  3. Java io流详解四

    转载地址:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html 写在前面:本文章基本覆盖了java IO的全部内容,jav ...

  4. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. Java IO流详解(一)——简单介绍

    文件在程序中是以流的形式来传输的.所以用Java来传输文件就得使用到Java IO流. 1.流的概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinkin ...

  6. Java IO流详解(六)——转换流

    转换流也是一种处理流,它提供了字节流和字符流之间的转换.在Java IO流中提供了两个转换流:InputStreamReader 和 OutputStreamWriter,这两个类都属于字符流.其中I ...

  7. Java IO流详解(五)——缓冲流

    缓冲流也叫高效流,是处理流的一种,即是作用在流上的流.其目的就是加快读取和写入数据的速度. 缓冲流本身并没有IO功能,只是在别的流上加上缓冲效果从而提高了效率.当对文件或其他目标频繁读写或操作效率低, ...

  8. java IO流 (一) File类的使用

    1.File类的理解* 1. File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)* 2. File类声明在java.io包下* 3. File类中涉及到关于文件或文件目录的创建.删除.重 ...

  9. Java IO流详解(四)——字符流Reader和Writer

    前面一章介绍了字节流的使用,提到了字节流在处理utf-8编码的中文可能会出现乱码的情况(其他编码的中文同样会出现乱码),所以Java针对这一情况提供了字符流. 但是字符流只能处理字符,不能用来处理 . ...

随机推荐

  1. 关于static 关键字的总结

    转发自:https://www.cnblogs.com/xrq730/p/4820992.html 前言 之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本 ...

  2. SpringBoot集成mybatis以及自动化测试代码实现

    Mybatis和logback的应用配置 1.在module的pom.xml文件中,加载springboot和swagger.lombok.fastjson.mysql.mybatis包 2.在res ...

  3. form表单提交且接口回调显示提交成功

    前端: <form method="post" enctype="multipart/form-data" id="formSubmit&quo ...

  4. Refusing to install package with name "webpack" under a package

    最近学习webpack 知识时 下载依赖结果报了这个错 查阅资料后发现是 这个name 不能使用所需要安装包的名字! 换为其他之后 再次操作命令 就没问题了

  5. Euler Sums系列(六)

    \[\Large\displaystyle \sum_{n=1}^{\infty}\frac{H_{2n}}{n(6n+1)}\] \(\Large\mathbf{Solution:}\) Let \ ...

  6. Springboot项目搭建(3)-shiro登录

    shiro简述+实现简单登录:https://www.jianshu.com/p/7f724bec3dc3

  7. Git - Windows 下, gitbash 打开资源管理器

    1. 概述 windows 下 gitbash 打开 资源管理器 2. 场景 资源管理唤起 gitbash 步骤 进入目录 鼠标右击 在 弹出菜单 中, 找到 Git Bash Here 结果 打开一 ...

  8. C语言运算符详解

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运 ...

  9. 了解Maven的基本知识

    我的博客地址:https://www.cnblogs.com/themysteryofhackers/p/11934540.html 更新时间:2019-11-26 一.Maven的基本概念 Mave ...

  10. Windows 下 Hbuilder 真机调试(Android,iphone)

    概述:主要讲讲自己在使用 HBuilder 真机调试功能时遇到的问题,以及如何解决.Android 相对没有遇到什么大问题,在电脑安装如360手机助手就可以正常使用了,主要问题是在 iphone 上( ...