java基础---I/O----第一天

第 1 I O

今日内容介绍

 File       递归

第1章 File

1.1 IO概述

    之前写过的程序,数据都是在内存中,程序运行结束,数据都没有,再想使用这些数据,已经没有了。我们能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。

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

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

因此我们把这种输入和输出动作称为IO操作。

在我们操作系统中,数据都保存在文件中,而文件存放相应的文件夹中。那么Java中是如何描述这些的呢?

1.2 File类的出现

    打开API,搜索File类。阅读其描述:File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。那么我们就要研究研究File这个类中都有那些功能可以操作文件或者文件夹呢?

1.3 File类的构造函数


通过构造方法创建File对象,我们进行演示:

package dayio.day01.com;//包
import java.io.File;//导入包
public class FileDemo {//创建类
/*
* 通过构造方法创建file对象
*/
public static void main(String[] args) {//主方法
//file构造函数
String pathName="D:\\MyEclipse Professional 2014\\ad\\IO_第1天(File、递归).doc";
File f1 = new File(pathName);//将文件封装成File对象,可以封装不存在的文件或文件夹,变成对象性
System.out.println(f1);//输出路径
File f2 = new File("D:\\MyEclipse Professional 2014\\ad\\","IO_第1天(File、递归).doc");
System.out.println(f2);
//将parent封装成file对象
File f3 = new File("D:\\MyEclipse Professional 2014\\ad");
File f4 = new File(f3,"IO_第1天(File、递归).doc");
System.out.println(f4);
}

}

运行结果:


//D:\\MyEclipse Professional 2014\\ad\\IO_第1天(File、递归).doc是文件的位置


1.4 File类的获取

创建完了File对象之后,那么File类中都有如下常用方法,可以获取文件相关信息


package dayio.day01.com;//包
import java.io.File;
/*
 * 获取文件的路径,文件名,文件大小
 */
public class File2Demo {//类
public static void main(String[] args) {//主方法
//创建文件对象
File f1 = new File("IO_第1天(File、递归).doc");
//获取文件的路径,全部路径
String abspath = f1.getAbsolutePath();
System.out.println(abspath);
//File中封装的路径是什么,获取的路径就是什么
String path = f1.getPath();
System.out.println(path);
//获取文件名称
String filename = f1.getName();
System.out.println(filename);
//获取文件大小
long size = f1.length();
System.out.println(size);
}
}

 

1.5 文件和文件夹的创建删除等


经常上面介绍,我们知道可以通过File获取到文件名称,文件路径(目录)等信息。

接下来演示使用File类创建、删除文件等操作。


l 我们进行方法的演示

package dayio.day01.com;


import java.io.File;
import java.io.IOException;


/*
 * 文件和文件夹的创建和删除
 */


public class File3Demo {//创建类
public static void main(String[] args) throws IOException {//主方法
//对文件或文件夹进行操作
File f1 = new File("D:\\MyEclipse Professional 2014\\ad\\file.txt");
//创建文件,如果文件存在,不创建fals,不存在就创建true,路径错误提示IOexcepption
//创建文件
boolean b2 = f1.createNewFile();
System.out.println(b2);
System.out.println(f1.getName());
//---------判断文件是否存在----------
boolean f4 = f1.exists();
System.out.println(f4);
System.out.println("-----------删除文件------------");
//-----------删除文件------------
//delete删除
boolean b3 = f1.delete();
System.out.println(f1.getName());
System.out.println("---------判断文件是否存在");
//---------判断文件是否存在----------
boolean f5 = f1.exists();
System.out.println(f5);
System.out.println("-----对目录进行操作、创建、删除、判断----------");
//-----对目录进行操作、创建、删除、判断----------
File ff = new File("E:\\MyEclipse Professional 2014");
//mkdir()创建目录
//mkdirs()创建多级目录
boolean ff1 = ff.mkdir();
System.out.println(ff1);
//删除目录,目录有内容无法删除
boolean ff2 = ff.delete();
System.out.println(ff2);
//判断目录是否存在
boolean ff3 = ff.isFile();
System.out.println(ff3);
System.out.println(ff.isDirectory());
}
}


1.6 listFiles()方法介绍

文件都存放在目录(文件夹)中,那么如何获取一个目录中的所有文件或者目录中的文件夹呢?那么我们先想想,一个目录中可能有多个文件或者文件夹,那么如果File中有功能获取到一个目录中的所有文件和文件夹,那么功能得到的结果要么是数组,要么是集合。我们开始查阅API

 

l 方法演示如下:

package dayio.day01.com;
import java.io.File;
public class File4Demo {
public static void main(String[] args) {
File f = new File("D:\\MyEclipse Professional 2014");
//获取的是目录下当前的文件及文件夹的名称
String[] na = f.list();
//遍历输出
for (String ff:na) {
System.out.println(ff);
}
System.out.println("=====获取目录下的文件及文件对象,======");
//获取目录下的文件及文件对象,
File[] f2 = f.listFiles();
for (File file : f2) {
System.out.println(file);
}
}
}


注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件

1,指定的目录必须是存在的,

2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException

1.7 文件过滤器

通过listFiles()方法,我们可以获取到一个目录下的所有文件和文件夹,但能不能对其进行过滤呢?比如我们只想要一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹呢?

我们是可以先把一个目录下的所有文件和文件夹获取到,并遍历当前获取到所有内容,遍历过程中在进行筛选,但是这个动作有点麻烦,Java给我们提供相应的功能来解决这个问题。

查阅File类的API,在查阅时发现File类中重载的listFiles方法,并且接受指定的过滤器。

 

l 测试类

package dayio.day01.com;
import java.io.File;
/*
 * //获取后缀名的所有文件
 */
public class File5Demo {
public static void main(String[] args) {
// 创建File文件
File f = new File("D:\\MyEclipse Professional 2014\\dayIO\\src\\dayio\\day01\\com");
// 获取指定后缀名的文件,
MyFilenameFilter mf=new MyFilenameFilter();
File[] f1 = f.listFiles(mf);
// 遍历输出符合条件的
for (File f3:f1) {
System.out.println(f3);
}
}
}

l 自定类继承FilenameFilter过滤器接口

定义类实现文件名称FilenameFilter过滤器

package dayio.day01.com;
import java.io.File;
import java.io.FilenameFilter;
public class MyFilenameFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
}

 


在查阅API时,我们发现,在listFiles(FileFilter filter) 也可以接受一个FileFilter过滤器,它和我们讲的FilenameFilter有啥区别呢?


FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。

FileFilter 过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象

当我们需要过滤文件名称时就可以使用FilenameFilter这个过滤器,当我们想对当前文件或文件夹进行过滤,就可以使用FileFilter ,比如需要当前目录下的所有文件夹,就可以使用FileFilter 过滤器。

l 测试类

package dayio.day01.com;
import java.io.File;
public class File6Demo {
public static void main(String[] args) {
//创建File对象
File f = new File("D:\\MyEclipse Professional 2014");
//获取指定目录下的文件夹
Filter ff = new Filter();
File[] f1 = f.listFiles(ff);
//遍历输出
for (File file : f1) {
System.out.println(file);
}
}
}

自定义类继承FileFilter过滤器接口

package dayio.day01.com;
import java.io.File;
import java.io.FileFilter;
/*
 * 获取文件下的所有文件
 * 用继承FileTFilter
 */
public class Filter implements FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}





猜你喜欢

转载自blog.csdn.net/qq_31308933/article/details/80724698
今日推荐