在上一章博客中简单的介绍了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. 解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)

    报错描述: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) 通过ansible远程给主机更换端口并重新启动ng ...

  2. Is It Good To Use LED Wall Light In Household Space?

    Wall lamps are mostly used for local lighting, can play a very decorative effect, improve the visual ...

  3. 【Python】摄氏度与华氏度互相转化

    Python入门程序,大家可以举一反三,进行各种转换,比如单位转化,货币转化等等,自行发挥即可! 原理:  代码: Tempstr=input("请输入带有符号的温度值:\n")# ...

  4. render方法渲染组件和在webpack中导入vue

    使用component注册的组件div容器里可以放多个,但是使用render的只能放一个 <div id="app"> <p>我可以放两个</p> ...

  5. 大数据-hdfs技术

    hadoop 理论基础:GFS----HDFS:MapReduce---MapReduce:BigTable----HBase 项目网址:http://hadoop.apache.org/ 下载路径: ...

  6. 编译和链接(lib和dll区别)(转载)

    1.头文件并不参加链接和编译.编译器第一步要做的就是简单的把头文件在包含它的源文件中展开.不知你是否能理解这句话.也就是头文件里面有什么内容,通通把它移到包含这个头文件的源文件里.(我觉得这是个很重要 ...

  7. kuangbin专题 专题九 连通图 Critical Links UVA - 796

    题目链接:https://vjudge.net/problem/UVA-796 题目:裸的求桥,按第一个元素升序输出即可. #include <iostream> #include < ...

  8. 概率dp poj2096

    /** dp求期望的题. 题意:一个软件有s个子系统,会产生n种bug. 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中. 求找到所有的n种bug,且每个子系统都找到bug,这样 ...

  9. Django视图层、模板层

    过滤器方法 upper 大写方式输出 add 给value加上一个数值 capfirst 第一个字母大写 center 输出指定长度的字符串,把变量居中 cut 删除指定字符串 date 格式化日期 ...

  10. 吴裕雄 python 机器学习——多项式贝叶斯分类器MultinomialNB模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,naive_bayes from skl ...