个人理解:

  File是个文件类,可以用其增加、删除、查找某种类型的文件或者文件夹,同时根据其成员变量的特点可以综合利用,避免出现跨系统的时候出现错误,并且查找时最好输入绝对路径,以免出现不存在的文件。使用递归时一定要主要好停止,以免栈内存溢出。

一、简述IO操作:

当需要把内存中的数据存储到持久化设备上的这个动作称为输出(写)output操作;

当把持久设备上的数据读取到内存中的这个动作称为输入(读)input操作。

这个输入和输出的动作称为IO操作。

二、File类:

1、文件类:

成员变量:

import java.io.File;

public class Demo01 {
public static void main(String[] args) {
//File类
//文件:File
//目录(文件夹):directory
//路径:path
//路径分隔符(与系统有关的)<windows里面是 ; linux里面是 : >
System.out.println(File.pathSeparator); // ;
//与系统有关的路径名称分隔符<windows里面是 \ linux里面是/ >
System.out.println(File.separator); // \
}
}

2、构造函数:

import java.io.File;

public class Demo02 {
public static void main(String[] args) {
File file=new File("D:\\java\\b.txt"); //双\\是转义
System.out.println(file);
File file2=new File("D:\\java","a.txt");//父路径、子路径--可以适用于多个文件的!
System.out.println(file2);
File parent=new File("D:\\java");
File file3=new File(parent,"a.txt");//File类的父路径、子路径
System.out.println(file3);
}
}

3、File类的获取及文件的创建和删除、判断:

import java.io.File;
import java.io.IOException; public class Demo03 {
public static void main(String[] args) throws IOException {
method06(); }
public static void method01(){
File file=new File("D:\\java\\a.txt");
//获取文件对象的绝对路径
System.out.println(file.getAbsolutePath());
File file0=new File("src");//写相对路径的话,会自动转成绝对路径,但是不去检验文件是否真实存在(只会给翻译回来,可能根本不存在) D:\JAVA0322\Day16\src
//获取文件对象的绝对路径
System.out.println(file0.getAbsolutePath());
File file00=new File("aa");//这个根本不存在 D:\JAVA0322\Day16\aa
//获取文件对象的绝对路径
System.out.println(file00.getAbsolutePath());
//获取文件对象的文件名或者目录名
System.out.println(file.getName());
//获取文件对象的路径所对应的字符串 类似于toString()方法
System.out.println(file.getPath());
//获取文件的大小(字节---Long类型)
System.out.println(file.length());
}
//文件创建和删除
public static void method02() throws IOException{
File file=new File("D:\\java\\d");
//创建文件
boolean flag=file.createNewFile();//都是创建的文件(最好都是加上后缀的),不能是文件夹
System.out.println(flag);
}
//文件删除
public static void method03(){
File file=new File("D:\\java\\d");
//删除文件(找不回来了)
boolean flag=file.delete();
System.out.println(flag);
}
//文件判断
public static void method04(){
File file=new File("D:\\java\\a.txt");
//判断该文件对象所对应的文件是否存在
System.out.println(file.exists());
//判断该文件对象是否是文件夹
System.out.println(file.isDirectory());
//判断该文件对象是否是文件
System.out.println(file.isFile());
}
//创建文件夹
public static void method05(){
File file=new File("D:\\java\\d.txt");//windows系统内文件夹名字不区分大小写,最后这个是文件夹的名字
boolean flag=file.mkdir();
System.out.println(flag);
}
//创建文件夹
public static void method06(){
File file=new File("D:\\java\\d\\a\\b");//mkdirs()用于创建多级目录,经常用的方法,不加s不能创建多级目录
boolean flag=file.mkdirs();
System.out.println(flag);
}
}

4、listFiles()方法介绍

import java.io.File;

public class Demo04 {
public static void main(String[] args) {
method03();
}
public static void method01(){
File file=new File("D:\\java");
//获取该路径下的文件和文件夹
String[] arr=file.list();
//遍历
for(String s:arr){
System.out.println(s);//返回文件的全部的名字
}
}
public static void method02(){
File file=new File("D:\\java");
//获取该路径下的文件和文件夹所对应的文件对象
File[] files=file.listFiles();
for(File f:files){
System.out.println(f);//获得的其绝对路径---根本方法
}
}
}

需要注意的是:

①、指定的目录也就是文件夹必须存在;

②、指定的必须是目录。否则会空指针。

4、文件过滤器:

FileFilter 与FilenameFilter都是接口:

 public static void  method03(){
File file=new File("D:\\java");
//获取该路径下的文件和文件夹所对应(括号内为条件,也就是某个类型)的文件对象
File[] files=file.listFiles(new MyFileFilter());
for(File f:files){
System.out.println(f);//获得的其绝对路径---根本方法
}
}
import java.io.File;
import java.io.FileFilter;
//过滤器:
public class MyFileFilter implements FileFilter{ public boolean accept(File pathname) {
/*//获取文件名
String filename=pathname.getName();
//判断文件名是否以.txt结尾
boolean flag=filename.endsWith(".txt");
return flag;
*/
return pathname.getName().endsWith(".txt"); }
}

三、递归:

  在当前方法内调用自己的现象

//递归
public class Demo01 { public static void main(String[] args) {
int sum=get(100);
System.out.println(sum);
}
//用递归计算1-100的和
public static int get( int num){
if(num==1){
return 1;
}
return num +get(num-1);
}
}
import java.io.File;

public class Demo02 {
public static void main(String[] args) {
File file=new File("D:\\java");
look(file);
}
public static void look(File file){
//获取该路径下所有的文件夹和文件
File[] files=file.listFiles(new MyFilter());//获得.txt文件和文件夹
//遍历
for(File f:files){
//如果是文件夹则继续寻找
if(f.isDirectory()){
look(f);
}else{//如果不是则打印
System.out.println(f);
}
}
}
}
import java.io.File;
import java.io.FileFilter; public class MyFilter implements FileFilter { public boolean accept(File pathname) {
//获取以.txt为后缀的文件
//如果是文件夹,那么放到File[]数组内
if(pathname.isDirectory()){
return true;
}
return pathname.getName().endsWith(".JaVa");
} }

需要注意的是:

1、要保证递归能够停下来;

2、递归次数不能太多;

3、构造方法不能递归使用。

JAVA基础之File类的更多相关文章

  1. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  2. 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类

    ---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...

  3. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  4. java基础42 File类的构造函数及其方法

    本文知识点(目录): 1.IO流(Input Output)    2.IO流技术的运用场景    3.File类的构造函数(方法)    4.File类的一些常用方法    5.实例(解析File类 ...

  5. java基础文件,File类

    此文参考自"Java SE程序设计" 编著: 青岛东合信息技术有限公司 算是做笔记,以后想看可以翻阅,顺便分享出来大家可以参照.如有侵权,请联系本人删除 文件 文件是相关记录或放在 ...

  6. Java基础教程——File类、Paths类、Files类

    File类 File类在java.io包中.io代表input和output,输入和输出. 代表与平台无关的文件和目录. 可以新建.删除.重命名,但不能访问文件内容. File类里的常量: impor ...

  7. java中的File类

    File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...

  8. java学习一目了然——File类文件处理

    java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...

  9. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

随机推荐

  1. bzoj 3522: Hotel dfs

    题目大意 在无边权树上求三个点,使两两点的距离等.求方案数\((n\leq 5000)\) 题解 我们知道三个点在树上的关系只有两种 三点共链 三点不共连 (这不是废话吗) 我们发现三点共链肯定不满足 ...

  2. 洛谷P3252 [JLOI2012]树

    题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不 ...

  3. codevs 2144 砝码称重2

    传送门 2144 砝码称重 2  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 钻石 Diamond 题解   题目描述 Description 有n个砝码,现在要称一个质量为m ...

  4. Set connectionId threw an exception.

    今天调试一个WPF程序时,出现一个问题. 程序运行后抛出异常, "Set connectionId threw an exception. XXXXXXXXXX",原因是依赖的一个 ...

  5. phpcms后台栏目权限修改无效的原因和解决方法

    现象:在phpcms后台中,新建角色,然后修改角色对应栏目权限,结果一直只能选择一半数量的栏目.剩下的栏目怎么修改都不生效. 对比: step1:再另一个phpcms后台做同样操作,依旧是这个结果.跟 ...

  6. 微信小程序运行机制

    对于扫描接口B生成的带参小程序码的问题: (1)线上版本 扫描不同带参的小程序码会重新执行小程序的整个注册程序生命周期(详细生命周期函数见官方文档), (2)扫描相同的二维码的时候,目前微信官方给出的 ...

  7. Django 的 路由系统

    Django 的路由系统 URL 配置(URLconf)就像Django 锁支撑网站的目录. 它的本质就是URL 与要为该URL 调用的视图函数之间的映射表. 你就是以这种方式告诉Django, 对于 ...

  8. unity5 manifest

    https://www.cnblogs.com/lancidie/p/5878789.html 之前曾经写了一篇博客介绍Unity5的AssetBundle,结果似乎很受关注.不过似乎很多人看了之后都 ...

  9. c++弱引用与强引用

    https://www.zhihu.com/question/26851369 智能指针一个很重要的概念是"所有权",所有权意味着当这个智能指针被销毁的时候,它指向的内存(或其它资 ...

  10. vue+element级联选择器对接后台数据

    1.后台接口返回的数据肯定要和级联选择器的数据一致,所以我专门弄个model存放返回的值,如下:/** * @Auther: GGDong * @Date: 2019/4/3 10:30 */@Get ...