File 文件
1 File 概述
文件:file
目录:directory
路径:path
File类静态成员变量:
pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串
separator:与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串
public class FileDemo {
public static void main(String[] args) {
//File类静态成员变量
//与系统有关的路径分隔符
String separator = File.pathSeparator;
System.out.println(separator);// 是一个分号,目录的分割(window中环境变量配置各个路径用分号分割,表示一个完整的路径结束) Linux中是冒号 :
//与系统有关的默认名称分隔符
separator = File.separator;
System.out.println(separator);// 向右 \ 目录名称分割 Linux /
}
}
File类构造方法:
File(String pathname);将给定路径名字符串转换成File对象,这样才可以使用File类中的方法
File(String parent, String child);根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 对象
File(File parent, String child); 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 对象
windows中的路径或文件名不区分大小写
绝对路径:是一个固定的路径,从盘符开始,在系统中具有唯一性
相对路径:相对于某个位置,表示路径之间的关系,在Eclipse相对路径默认为项目的根目录
String pathName = "e:\\java_code\\hello.java";
File f1 = new File(pathName);//将hello.java文件封装成File对象
/*
* File(File parent,String child)
* 好处: 父路径是File类型,父路径可以直接调用File类方法
*/
public static void function_2(){
File parent = new File("d:");
File file = new File(parent,"eclipse");
System.out.println(file);
}
/*
* File(String parent,String child)
* 好处: 单独操作父路径和子路径
*/
public static void function_1(){
File file = new File("d:","eclipse");
System.out.println(file);
}
File类的获取功能:
String getPath();将抽象路径转为路径名字符串
String getName();获取路径中的文件或文件加名称
long length();获取文件字节大小
String getAbsolutePath();获取绝对路径,返回String对象
File getAbsoluteFile();获取绝对路径,返回File对象
String getParent();获取父路径,返回String对象
File getParentFile();获取父路径,返回File对象
File类创建文件和目录:
boolean createNewFile();创建空文件,如果已存在同名文件则创建失败
boolean file.mkdir();创建文件夹,如果已存在则创建失败
boolean file.mkdirs();创建多级文件夹,如果父文件夹不存在,会同时创建父文件夹
boolean file.exists();判断文件是否存在
boolean file.isFlie();判断是否是文件
boolean file.isDirectory();判断是否是文件夹
boolean file.delete();删除文件或文件夹,不进回收站,慎用。删除文件夹时,如果文件夹中有内容,无法直接删除
File类list()遍历:
String[] list():获取路径中的文件和文件夹名 (遍历一个目录),返回包含名字的String数组
File[] listFiles():获取路径中的文件和文件夹名(遍历一个目录),返回包含文件或目录全路径的File数组
static File[] listRoots(): 获取系统中的所有根目录
File dir = new File("e:\\java_code");
//获取的是目录下的当前的文件以及文件夹的名称。
String[] names = dir.list();
for(String name : names){
System.out.println(name);
}
//获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
File[] fileArr = dir.listFiles();
for(File file : fileArr){
System.out.println(file);
}
2 FilenameFilter、FileFilter过滤器
作用:过滤一个目录下指定扩展名的文件,或包含某些关键字的文件夹
FilenameFilter过滤器:
String[] list(FilenameFilter filter);返回满足指定过滤器的文件和文件夹,返回的是文件/文件夹名String数组
boolean accept(File dir, String name);测试指定文件是否包含在某一文件列表中
FileFilter过滤器:
File[] listFiles(FileFilter filter);返回满足指定过滤器的文件和文件夹,返回的是抽象路径名File数组
boolean accept(File pathname);测试指定抽象路径名是否包含在某个路径列表中
FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。
FileFilter过滤器中的accept方法接受一个参数,是当前文件或文件夹对象。
FileFilter可以看做是FilenameFilter的功能加强,提供了文件对象的访问方法。
用FilenameFilter搜索特定文件扩展名,结果会难以判断到底是文件夹还是文件。
例如,文件夹下包含文件夹:txt,文件:xxx.txt,accept方法中return name.endsWith("txt");就会连文件夹txt一起返回。
另外,listFiles(FilenameFilter filter)先用字符串匹配,匹配成功后创建File对象。
而listFiles(FileFilter filter)先创建File对象,然后使用File对象进行匹配。
所以,如果不对文件进行操作,listFiles(FilenameFilter filter)效率更高。
如果需要对文件进行操作,则需要使用listFiles(FileFilter filter)。
文件过滤器原理:
1 listFiles()遍历目录的同时,获取到了文件名全路径,
2 调用过滤器的方法accept,将获取到的路径传递给accept方法的参数pathname,accept方法接收了listFiles传递来的参数pathname进行判断,如果这个路径是Java文件,返回true,否则返回false。
3 一旦方法返回true,listFiles将路径保存到File数组中。
public class FileDemo {
public static void main(String[] args) {
//获取扩展名为.java所有文件
File file = new File("E:\\新建文件夹");
File[] files = file.listFiles(new MyFileFilter());
for (File f : files) {
System.out.println(f);
}
}
}
//自定类继承FilenameFilter过滤器接口
class MyFileFilter implements FilenameFilter{
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
}
3 递归遍历文件夹、递归搜索指定文件
public class FileDemo {
public static void main(String[] args) {
File dir = new File("d:\\新建文件夹");
getAllDir(dir);
System.out.println("-----");
getAllFile(dir);
}
public static void getAllDir(File dir){
System.out.println(dir);
File[] fileArr = dir.listFiles();
for(File f : fileArr){
if(f.isDirectory()){
getAllDir(f);
}else{
System.out.println(f);
}
}
}
public static void getAllFile(File file) {
File[] files = file.listFiles(new MyFileFilter());
for (File f : files) {
if(f.isDirectory()){
getAllFile(f);
}else{
System.out.println(f);
}
}
}
}
class MyFileFilter implements FilenameFilter{
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
}
File 文件的更多相关文章
- FILE文件流的中fopen、fread、fseek、fclose的使用
FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...
- File文件的使用
线程的停止: 1.停止一个线程一般是通过一个变量来控制 2.如果需要停止一个处于一个等待状态的线程,那么需要配合interrupture方法来完成 守护线程:(后台线程):在一个进程中只剩下守护线程, ...
- Python学习(16)File(文件)方法
Python File(文件) 方法 file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 1 file.close() 关闭文件.关闭后文件不能再进行读 ...
- android内核读取file文件
内核读取file文件的方法: char* file_read(const char * file_path) { struct file *file = NULL; //保存打开文件的文件指针变量 s ...
- Java文件操作二:File文件的方法
一.文件的判断方法 判断方法 .boolean canExecute()判断文件是否可执行 .boolean canRead()判断文件是否可读 .boolean canWrite() 判断文件是否可 ...
- Java file文件的写入和读取及下载
File文件的写入 一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定 ...
- js 实现 input type="file" 文件上传示例代码
在开发中,文件上传必不可少但是它长得又丑.浏览的字样不能换,一般会让其隐藏点其他的标签(图片等)来时实现选择文件上传功能 在开发中,文件上传必不可少,<input type="file ...
- file和file文件流
**io流是程序中比较常用的功能,基本上涉及到文件上传下载的都要用到这功能,比如上传头像,上传附件等等. 对于一个java程序员来说,io流也是必须掌握的,因此这里对比较常用的或者说曾经用过的方法进行 ...
- js获取input file文件二进制码
<html> <body> <img id="image"src=""/> <br/> <input ty ...
- js 图片base64转file文件的两种方式
js 图片base64转file文件的两种方式 https://blog.csdn.net/yin13037173186/article/details/83302628 //将base64转换为bl ...
随机推荐
- Mina简单的入门示例
Mina是Apache下的一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输协议上抽象的事件驱动的异步API,例如TCP/IP和 ...
- 简单探讨spring整合mybatis时sqlSession不需要释放关闭的问题
https://blog.csdn.net/RicardoDing/article/details/79899686 近期,在使用spring和mybatis框架编写代码时,sqlSession不需要 ...
- badgeview
https://github.com/AlexLiuSheng/BadgeView include: compile 'com.allenliu.badgeview:library:1.1.1'(ne ...
- 【转】Linux netstat命令详解,高级面试必备
简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...
- Flask学习笔记(2)--最简单的小应用
0x01 第一个小程序 PyCharm新建一个flask项目,第一个小程序,我们来看一下 #引入flask类 from flask import Flask #将Flask对象实例化 app = Fl ...
- 【netcore基础】ConcurrentDictionary 使用字符串作为key给代码加锁且使用EF事物防止并发调用数据混乱的问题
业务场景需要锁住指定的字符串下的代码,防止并发创建多个订单 这里我们使用 ConcurrentDictionary 首先初始化一个字典 private static readonly Concurre ...
- node.js用logio实时监控log
http://logio.org/ 1.先装好node.js $ yum install nodejs 2.安装log.io $sudo npm install -g log.io --user &q ...
- asp.net mvc 路由检测工具
初学mvc,路由搞不清楚,可以通过一款插件 查看匹配的路由. 工具名<RouteDebugger> 可以在nuget中查询RouteDebugger后,安装.或者在控制台进行安装: pm& ...
- docker学习(一)
在工作和生活中免不了要学习新的东西.学习新东西要和已有的东西相结合,要有较快的效率.今天学习一下docker的使用,也锻炼一下自己学习新东西的能力. 1.学习docker,首先要下载docker.首先 ...
- Java课程寒假之开发记账本软件(网页版)之二
一.实现基础功能之一(记账) 一个记账本最基础之一的功能就是记账,所以也是首先要解决的问题,我选择了上学期使用的MySQL数据库来对账本进行存储. 我选择记账的方法是分开记账,就是支出放在一个表,收入 ...