1. File类

1.1. File类说明

存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永

久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动,传送,亦可以被其他程序使用.由于数据存储在文件中,所以我们需要学习一个和文件有密切关系的类,叫做File类,将要掌握获取文件的属性以及删除和重命名文件.最终如何向文件中写入数据和从文件中读取数据.

那么File类关心的是在磁盘上文件的存储.

File类描述的是一个文件或文件夹。(文件夹也可以称为目录)

该类的出现是对文件系统的中的文件以及文件夹进行对象的封装。可以通过对象的思想来操作文件以及文件夹。

可以用面向对象的处理问题,通过该对象的方法,可以得到文件或文件夹的信息方便了对文件与文件夹的属性信息进行操作。

文件包含很多的信息:如文件名、创建修改时间、大小、可读可写属性等。

1.2. 体验File类

检验指定路径下是否存在指定的目录或者文件.

// 检验指定路径下是否存在指定的目录或者文件.

File file = new File("c:\\a.txt");

System.out.println(file.exists());

// File对象是否是目录

System.out.println(file.isDirectory());

// 对象是否是文件

System.out.println(file.isFile());

结论:File对象也可以表示不存在的文件。其实代表了一个抽象路径

构建一个File类的实例并不会在机器上创建一个文件.不管文件是否存在都可以创建任意文件名的File实例,可以调用File实例的exists方法判断文件或目录是否存在

1.3. 构造一个File类实例:

new File(String pathname);

通过将给定路径来创建一个新File实例。

new File(String parent, String child);

根据parent路径名字符串和child路径名创建一个新File实例。

parent是指上级目录的路径,完整的路径为parent+child.

new File(File parent, String child);

根据parent抽象路径名和child路径名创建一个新File实例。

parent是指上级目录的路径,完整的路径为parent.getPath()+child.

说明:

如果指定的路径不存在(没有这个文件或是文件夹),不会抛异常,这时file.exists()返回false。

新建File对象File file=new File();

public static void main(String[] args) {

File file = new File();

}

1:创建File对象需要导包, import java.io.File

2:File对象没有无参数构造.创建对象需要传参.

根据API文档提示,传入一个文件的字符串路径. String path="c:/a.txt";

(a.txt 文件在c盘下已经存在)

//file 是一个文件对象

String path = "c:/a.txt";

File file = new File(path);

File类的对象,既可以代表文件也可以代表文件夹。

public static void main(String[] args) {

//file 是一个文件夹

String path = "c:/test";

File file = new File(path);

}

1.4. 路径:

路径就是文件或文件夹所在的位置。

1.4.1. 路径分割符:

上下级文件夹之间使用分隔符分开:

在Windows中分隔符为'\',在Unix/Linux中分隔符为'/'。

跨平台的目录分隔符

更专业的做法是使用File.separatorChar,这个值就会根据系统得到的相应的分割符。

例:new File("c:" + File.separatorChar + "a.txt");

注意,如果是使用"\",则需要进行转义,写为"\\"才可以,如果是两个"\",则写为"\\\\"。

实验:

在以下代码的path处写不同的路径试一下,并观察输出结果。

File file = new File(path);

System.out.println(file.getAbsolutePath());

1.4.2. 绝对路径与相对路径:

对于UNIX平台,绝对路径名的前缀是"/"。相对路径名没有前缀。

对于Windows平台,绝对路径名的前缀由驱动器号和一个":"组成,例"c:\\..."。相对路径没有盘符前缀。

相对路径:

相对路径是指相对于某位置的路径,是指相对于当前目录。

在执行Java程序时,相对路径为执行java命令时当前所在的目录。

实验:

在不同的路径下执行java命令运行以下程序,并观察输出结果。

File file = new File("a.txt");

System.out.println(file.getAbsolutePath());

一般在使用时,建议用绝对路径,因为相对路径容易出问题,不好确定到底在什么地方。

//相对路径

//File file = new File("src/a.txt");

1.5. File类中常用的方法:

创建:

createNewFile() 在指定位置创建一个空文件,成功就返回true,如果已存在就不创建然后返回false

mkdir() 在指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常。

mkdirs() 在指定位置创建目录,这会创建路径中所有不存在的目录。

renameTo(File dest) 重命名文件或文件夹,也可以操作非空的文件夹,文件不同时相当于文件的剪切,剪切时候不能操作非空的文件夹。移动/重命名成功则返回true,失败则返回false。

删除:

delete() 删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除,成功返回true,失败返回false。

deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除

判断:

exists() 文件或文件夹是否存在。

isFile() 是否是一个文件,如果不存在,则始终为false。

isDirectory() 是否是一个目录,如果不存在,则始终为false。

isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。

isAbsolute() 测试此抽象路径名是否为绝对路径名。

获取:

getName() 获取文件或文件夹的名称,不包含上级路径。

getPath()       返回绝对路径,可以是相对路径,但是目录要指定

getAbsolutePath() 获取文件的绝对路径,与文件是否存在没关系

length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。

getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。

lastModified() 获取最后一次被修改的时间。

文件夹相关:

staic File[] listRoots() 列出所有的根目录(Window中就是所有系统的盘符)

list() 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。

list(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。

listFiles(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

1.6. 案例:

1,列出指定目录中所有的子文件名与所有的子目录名。

2,列出指定目录中所有的子文件名与所有的子目录名,要求目录名与文件名分开列出,格式如下:

子目录:

...

...

子文件:

...

...

3,列出指定目录中所有扩展名为.java的文件。

4,列出指定目录中所有扩展名为.class的文件。

5,思考第3与第4题,代码是不是重复呢,如果想要列出其中的所有.txt文件,是不是要再写一个类呢?

a, 请自行设计一个工具方法,可以传递指定的扩展名,工具方法会过列出指定目录中指定扩展名的所有子文件与子文件夹。

b, 请利用FilenameFilter接口写一个工具类,可以传递指定的过滤规则。

6,列出指定目录中所有的子孙文件与子孙目录名,只需要列出名称即可。

解题: 列出指定目录中所有的子文件名与所有的子目录名。

需求1:获取所有的c:/test 即test目录下的所有文件和文件夹

解题思路:

代码需要封装,就需要创建方法,并在main方法中调用和测试. 方法名要有意义: listAllFilesAndDirs

第一步:创建File对象

第二步:查找File类中可用的方法,想要获取该目录下的所有子文件和子目录

第三步:显示这些文件和文件夹的名称

实现:

/**

* 列出指定目录中所有包含的子文件与子目录

*/

public static void listAllFilesAndDirs(String path) {

// 1.创建File对象,表示这个目录

File dir = new File(path);

// 2.通过list方法得到所包含的所有子目录与子文件名称

String[] names = dir.list();

// 3显示这些名称

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

System.out.println(names[i]);

}

}

解题: 列出指定目录中所有的子文件名与所有的子目录名,要求目录名与文件名分开列出

案例1把文件和文件夹都列了出来,但是无法区分文件和文件夹.File类有判断文件和文件夹的方法,但是list方法返回的是String数组,这个list() 方法无法满足我们的需求.继续查找File的方法.查看api找到 File[] listFiles()  发现该方法返回的是一个File数组。

思路:

第一步:创建listAllFilesAndDirs(String path)方法,接受路径

第二步: 创建File对象表示这个目录

第三步: 通过listFiles方法得到所包含的所有子目录与子文件名称

第四步: 得到所有的文件名集合,与所有的文件夹名集合

第五步: 分别显示文件名与文件夹名

实现

public static void listAllFilesAndDirs2(String path) {

// 1.创建File对象,表示这个目录

File dir = new File(path);

// 2通过listFiles方法得到所包含的所有子目录与子文件名称

File[] names = dir.listFiles();

// 3,分别显示文件名与文件夹名

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

File file = names[i];

if (file.isFile()) {

System.out.println(("子文件:"));

System.out.println("\t" + file.getName());

} else if (file.isDirectory()) {

System.out.println(("子目录:"));

System.out.println("\t" + file.getName());

}

}

}

实现二:

public static void listAllFilesAndDirs(String path) {

//1创建File对象表示这个目录

File dir = new File(path);

//2通过listFiles方法得到所包含的所有子目录与子文件名称

File[] names = dir.listFiles();

//3,得到所有的文件名集合,与所有的文件夹名集合

List filesList = new ArrayList();

List dirsList = new ArrayList();

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

File file = names[i];

if (file.isFile()) {

filesList.add(file);

} else if (file.isDirectory()) {

dirsList.add(file);

}

}

//4,分别显示文件名与文件夹名

System.out.println("子文件:");

for (int i = 0; i < filesList.size(); i++) {

System.out.println("\t" + filesList.get(i).getName());

}

System.out.println("子目录:");

for (int i = 0; i < dirsList.size(); i++) {

System.out.println("\t" + dirsList.get(i).getName());

}

}

练习3,列出指定目录中所有扩展名为.java的文件。

需求: 从指定目录中找到指定扩展名的文件,并列出来

思路

第一步: 创建lsitAllFiles方法,接受路径和文件后缀名

第二步: 获取所有的子文件和子文件夹

第三步: 从中找出符合条件的文件并显示出来

注意:不同系统对于路径的 windows系统使用斜线作为路径分隔符 "\" linux 系统使用反斜线作为路径分隔符"/"java是跨平台的语言,java程序如果部署到linux系统上,如果程序中有File对象, 可以使用File类separatorChar (字段)

public class FileTest2 {

public static void main(String[] args) {

String path = "c:" + File.separatorChar + "test";

File file = new File(path);

listtAllFiles(file, "java");

}

/**

* 从指定目录中找到指定扩展名的文件,并列出来

*

*/

public static void listtAllFiles(File dir, String extension) {

// 1.获取所有的子文件和子文件夹

File[] files = dir.listFiles();

// 2.从中找出符合条件的文件并显示出来

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

File file = files[i];

// 3.需要以指定文件后缀结尾才算符合条件

if (file.getName().endsWith(extension)) {

System.out.println(file.getName());

}

}

}

}

练习4:

public class FileTest2 {

public static void main(String[] args) {

String path = "c:" + File.separatorChar + "test";

File file = new File(path);

listtAllFiles2(file, "txt");

}

/**

* FilenameFilter接口写一个工具类,可以传递指定的过滤规则。

*  从指定目录中找到指定扩展名的文件,并列出来

*

* */

public static void listtAllFiles2(File dir, String name) {

// 1.获取所有的子文件和子文件夹

String[] files = dir.list(new DirFilter("txt"));

// 2显示名称

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

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

}

}

}

class DirFilter implements FilenameFilter {

private String extension;

public DirFilter() {

}

public DirFilter(String extension) {

this.extension = extension;

}

@Override

public boolean accept(File dir, String name) {

return name.endsWith(extension);

}

}

注意: DirFilter 就是实现了accept 方法.提供给File类的list方法使用.

java file的用法_Java 关于File使用相关推荐

  1. java isfile 的用法_Java File isFile()方法

    Java File isFile()方法 java.io.File.isFile() 检查表示此抽象路径名的文件是否是一个正常的文件. 1 语法 public boolean isFile() 2 参 ...

  2. java file类包_Java中File类的常用API

    Java.io包下的File类实现了Serializable和Comparable两个接口 1.创建文件 注意: 1).如果D盘下file文件夹不存在,则抛出异常;如果D盘下file文件夹存在,则创建 ...

  3. java 文件路径校验_java中File的绝对路径和相对路径的校验

    1.首先看一下File中参数的集中形式 ①//构造函数File(String pathname) File f1 = new File("c:\\1.txt"); ②//File( ...

  4. Java的getcelltype用法_java getCellType的替代方法

    我正在使用org.apache.poi 3.15讀取excel文件. 這是我的代碼:try (FileInputStream fileInputStream = new FileInputStream ...

  5. java中extends用法_JAVA的extends用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

  6. cal java中的用法_Java中static用法

    Java中static用法 转自 http://blog.pfan.cn/sword2008/13772.html 一.static 请先看下面这段程序: public class Hello{ pu ...

  7. java filefilter的用法_Java File.listFiles(FileFilter filter)方法

    Java Java File.listFiles(FileFilter filter)方法具有以下语法. public File [] listFiles(FileFilter filter) 示例 ...

  8. java resourse 报错_java.nio.file.InvalidPathException: Illegal char :

    一.报错: java.nio.file.InvalidPathException: Illegal char <:>at sun.nio.fs.WindowsPathParser.norm ...

  9. java 删除文件失败_java中File的delete()方法删除文件失败的原因

    一般来说 java file.delete失败 有以下几个原因 1.看看是否被别的进程引用,手工删除试试(删除不了就是被别的进程占用) 2.file是文件夹 并且不为空,有别的文件夹或文件, 3.极有 ...

最新文章

  1. 绩效辅导,阿里这样做
  2. 网络功能虚拟化(NFV)的作用—Vecloud微云
  3. inline-block什么意思中文_css中inline-block是什么?inline-block布局的使用
  4. OAuth2.0学习(1-9)新浪开放平台微博认证-web应用授权(授权码方式)
  5. 调用支付宝PHP接口API实现在线即时支付功能(UTF-8编码)
  6. hystrix总结之多返回值命令
  7. maven安装教程安装教程_Maven教程之春
  8. 【LeetCode笔记】剑指 Offer 55 - II. 平衡二叉树(递归、二叉树)
  9. 零基础搭建Hadoop大数据处理环境
  10. FTP 1 协议分析
  11. mplayer slave 模式文档翻译
  12. 计算机培训实践反思模板,基于问题解决式课堂教学模式的反思
  13. oracle切换实例启动,3.1 Oracle体系结构之实例启动与关闭
  14. pom文件project爆红
  15. vue两列数据 合并成一列
  16. 信息系统项目管理师考试核心考点汇总
  17. linux网络操作系统项目教程第三版答案,《Linux网络操作系统项目教程(RHEL7.4 CentOS 7.4)(第3版))》习题及答案...
  18. 【记录读论文时遇到的一些算法2】—— Occupancy Grid Map
  19. python中bttext什么意思_Python实现解析Bit Torrent种子文件内容的方法
  20. iOS 内购项目的App Store推广

热门文章

  1. 我国计算机系统安全保护等级的划分,信息安全技术题库:我国制定了强制性国家标准《计算机信息系统安全保护等级划分准则》,其中属于第二级的是()。...
  2. Java集合11 (Queue)
  3. listview选中高亮
  4. 一张图读懂MVC设计模式,从用户发起请求到获取响应,应用内部到底是如何数据流转、业务串联的
  5. 数据比赛大杀器----模型融合(stackingblending)(转载)
  6. vba ado返回集合_利用VBA代码导出工作表中的图片
  7. 计算机开机慢更新配置,电脑开机太慢怎么办?这样设置一下,5秒点亮
  8. webAppbuilder微件使用教程1 快速入门
  9. 从外部访问Kubernetes集群中的应用
  10. MFC 教程【10_内存分配方式和调试机制 】