黑马程序员Java笔记——IO篇之File类

----------- android培训java培训、java学习型技术博客、期待与您交流! ---------

File

一.引述

I/O流,流对象只能操作设备上的数据,而不能操作文件,例如,创建文件;更改文件属性;获取文件名字……这些I/O流对象都不能操作,如果想要进行这些操作,我们就有要引入一个类:File类。

File类:用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。

File对象可以作为参数传递给流的构造函数。

File类中的常用方法。

注意,因为File类是用来将文件或者文件夹封装成对象,所以在创建的时候一定要传入一个文件,或者一个文件夹的名称。

二.简述

1)字段摘要

1.1 separator 表示与系统有关的路径分隔符,为了方便,它被表示为一个字符串。

1.2 pathSeparatorChar表示与系统有关的路径分隔符。此字段被初始为包含系统属性 path.separator 值的第一个字符。此字符用于分隔以路径列表 形式给定的文件序列中的文件名。在 UNIX 系统上,此字段为 ':';在 Microsoft Windows 系统上,它为 ';'

路径列表:例如,环境配置里的Path变量。

2)构造方法

2.1  FileString Pathname)通过将给定的路径字符串转换为抽象路径来创建一个新的File实例;也就是说,可以将一个已存在的,或者不存在的文件或者目录封装成一个File对象

2.2 File String parent, String child)根据parent路径字符串和child路径名字符串创建一个新的File实例;

2.3 File File parent, String child)根据parent抽象路径名和 child 路径名字符串创建一个新的File实例;此构造方法与1.2不同,它可以使用File对象的方法来操作参数而1.2不可以使用File对象的方法来操作,只能使用字符串对象的方法来操作。

常用方法摘要

(3)获取

3.1 获取文件名称:String name = file.getName();

3.2 获取文件绝对路径:String absPath = file.getAbsolutePath();

3.3 获取文件参数输入路径:String path = file.getPath();

比较:3.33.2;这两个方法都是获取文件路径,但是3.2获取的是绝对路径;

3.3获取的是创建对象是传入的参数路径:可以是相对的也可以是绝对的。

因此,file.getPath()可能获取相对的路径,也可能获取绝对路径。

补充:

相对路径:不以盘符为开头的路径就是相对路径

绝对路径:以盘符开头的路径就是绝对路径——虽然不太对但是好记;

对于相对路径来讲:在根目录看来——我的附庸的附庸不是我是附庸;

对于绝对路径来讲:在根目录看来——你,生是我的人,死是我的鬼,直属关系,绝对掌控;

3.4 获取文件父目录:String parent = file.getParent();

如果参数是相对路径那么返回值为null

3.5 获取文件大小:long len = file.length();

3.6 获取文件修改时间 :long time = file.lastModified();

此方法返回最后修改文件时的毫秒值

(4)创建与删除

4.1 创建文件:createNewFile(); 返回值为boolean;

此方法,如果指定文件不存在则创建指定文件;如果存在则不创建

(对比输出流,输出流创建文件时,无论是否存在一律覆盖,除非你指定)

4.2 删除文件:delete();返回值为:boolean

4.3 删除文件:deleteOnExit(); 在JVM退出时删除

4.4 创建文件夹:mkdir(); 返回值为:boolean

此方法适用于创建单级目录;

4.5 创建多级目录:mkdirs();返回值为:boolean

此方法适用于创建多级目录;

4.5 删除文件夹:dir.delete(); 返回值为:boolean

关于文件删除:如果当前文件正在被操作则无法被删除。

关于文件夹的删除,在Win系统中如果一个文件夹为空你可以使用,Dos命令或者 使用java语句来删除,但是,如果一个文件夹内,有文件,你必须从文件夹里向 文件夹外一层一层的删除。不能一次性的删除干静。

5)判断

5.1 判断文件是否存在:exists();返回值为:boolean

5.2 判断是否为文件:is.File( ); 返回值:为boolean

5.3 判断是否为目录:isDirectory( );返回值:boolean

知识盲点:其实文件夹可以有后缀名称;而文件也可以没有后缀;(虽然有些无聊)

(6)重命名

6.1 文件重命名file 1.renameTo(file2);

同一个目录下两文件重命名;

不同目录下源文件(file)剪切,并改名(为file2

同类文件对象才可以操作,貌似如果这样就不行 dir.renameTo(file)

文件夹和文件都可以带后缀或不带,但必须保证名称不同:
1)在window中文件的命名规则是前缀加后缀;
2)文件名指的就是全名,即前缀加后缀;
3)系统命名规则中把文件和文件夹都当成文件;
4)一般文件夹不写后缀,文件写后缀,但其实是不同的名称;
5)当文件名不带后缀时,就可能与文件夹重名;
6)这时,系统就认为文件重名了,所以不能命名成功。

(7)列出可用的文件系统根

File[ ] files = File.listRoots();

7.1  listRoots();——这是一个静态方法不需要你创建对象,返回一个数组

(8)获取信息

8.1 获取盘符可用空间getFreeSpace() 返回值类型lang

8.2获取盘符全部空间 getTotalSpace( )

8.3  获取当前盘符中文件及文件夹名称 list() 返回值:String[]

注意:1·调用list()方法的对象中封装的必须是目录。否则会发生空指针异常

              2·如果访问的是系统级目录也会发生空指针异常

  3·如果目录存在但是没有内容,会返回一个数组,但是长度为0

8.4   list()方法的重载;

          list(FilenameFilter filter) ;
          此方法返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足

          指定过滤器的文件和目录

 接口 FilenameFilter实现此接口的类实例可用于过滤器文件名

boolean

accept(File dir, String name)
          测试指定文件是否应该包含在某一文件列表中。

三.练习

(9)Test:

9.1获取电脑最大剩余空间的硬盘和大小;——知识点应用(7)、(8

import java.io.File;

import java.io.IOException;

/**

 * 获取你电脑上最大的盘符空间

 * 1.遍历你的电脑,获取所有的盘符

 * listRoot();

 * 2.遍历每一个盘符的空闲空间;

 * getFreeSpace()

 * 3.找出空闲空间最大的盘符

 * 

 */

public class FileDemo{

//查看自己电脑中可用空间最大的盘符

public static void main(String[] args) throws IOException{

//1.获取电脑盘符根路径

File[] files = File.listRoots();

//2.遍历数组,并找出剩余空间最大的元素,和其下标;

int index = 0;

long max = 0;

//开始遍历

for(int i = 0; i < files.length; i++){

if(files[i].getFreeSpace() > max){

max = files[i].getFreeSpace();

index = i;

}

}

System.out.println("亲,电脑中剩余空间最大的盘符是"+(char)(index+(int)('C'))+"\t剩余空间是"+max+"字节");

}

}

9.2深度遍历

import java.io.File;

public class FileTest {

/**

 * 需求:对指定的目录进行所有内容的列出(包含子目录中的内容)也就是深度遍历

 * 

 * 1.遍历指定路径;获取路径中文件和文件夹

 * 2.判断如果是文件夹,继续遍历,

 * 3.重复上述动作

 */

public static void main(String[] args) {

//封装路径对象

File dir = new File("i:\\java");

listAll(dir);

}

private static void listAll(File dir) {

//1.获取指定目录下当前的所有文件夹或者文件对象;

File[] files = dir.listFiles();

for(int i = 0; i < files.length; i++){

//打印美观,加上盘符标记;

System.out.print("file: ");

//2.判断

//如果获取的文件对象是文件夹,继续遍历

if(files[i].isDirectory()){

//3.递归,因为这个方法本身就是用来遍历文件目录的,所以他可以调用自身

listAll(files[i]);

}

else

//获取文件的决定路径

System.out.println(files[i].getAbsolutePath());

}

}

}

9.3 删除一个带内容的文件夹——应用知识点:深层遍历、(4

import java.io.File;

public class RemoveDirTest {

/**

 *  需要:删除一个带内容的文件

 *  思路:

 *  1.深层遍历指定路径

 *  2.判断遍历到的对象为文件还是文件夹

 *  3.从内到外删除文件。

 *  4.最后删除文件夹,一次就够了,只要没有内容

 *  

 */

public static void main(String[] args) {

File dir = new File("F:\\ABC");

removeDir(dir);

}

private static void removeDir(File dir) {

File[] files = dir.listFiles();

for(int i = 0; i < files.length; i++){

if(files[i].isDirectory()){

removeDir(files[i]);

}

else{

System.out.println(files[i]+":"+files[i].delete());

}

}

System.out.println(dir+":"+dir.delete());

}

}

你可能感兴趣的:(笔记,Java笔记)