一、构建File对象
1.File(String Pathname)
File的每一个实例可以表示硬盘上的一个文件或目录(实际上表示的是一个抽象路径)
代码如下(示例):
2.File(File parent,String child)
代码如下(示例):
3.File isFile()方法
该方法是判断File是否是一个文件,返回值是boolean类型
代码如下(示例):
4.File 的length()方法
需要注意的是File的length方法返回值是一个long类型的数字,文件的字节量很大很大
代码如下(示例):
5.File 的delete()和exists()方法
要想删除一个文件,那么首先先判断一下该文件是否在目录中,exists方法返回的是一个boolean类型的值
代码如下(示例):
6.File 的createNewFile()和exists()方法
代码如下(示例):
7.File 的isDiractory()和ListFiles()方法
代码如下(示例):
package file;
import java.io.File;
/**
* 访问一个目录中的子项
*/
public class ListFilesDemo {
public static void main(String[] args) {
//获取当前目录中的所有内容
File dir = new File(".");
/*
boolean isFile()
判断当前file表示的是否是一个文件
boolean isDirectory()
判断当前File是否表示的是一个文档
*/
if(dir.isDirectory()){
File[] subs = dir.listFiles();
System.out.println(subs.length);
for(int i=0;i<subs.length;i++){
System.out.println(subs[i].getName());
}
}
}
}
8.File 的mkdir()和mkdirs()方法
代码如下(示例):
package file;
import java.io.File;
/**
* 创建一个目录
*/
public class MkDirDemo {
public static void main(String[] args) {
//当前目录下创建一个目录:demo
// File dir = new File("demo");
//当前目录下新建目录:./a/b/c/d/e/f
File dir = new File("a/b/c/d/e/f");
if(dir.exists()){
System.out.println("该目录已存在");
}else{
dir.mkdirs();//创建多级目录
// dir.mkdir();//创建单个目录
System.out.println("目录已创建");
}
}
}
package file;
import java.io.File;
/**
* 删除一个目录
*/
public class DeleteDirDemo {
public static void main(String[] args) {
//将当前目录下的demo目录删除
File dir = new File("demo");
if (dir.exists()) {
dir.delete();//删除多级目录时里面都是空的才能删除
System.out.println("该目录已删除");
}else{
System.out.println("该目录不存在");
}
}
}
9.File 的文件过滤器
代码如下(示例):
package file;
import java.io.File;
import java.io.FileFilter;
/**
* 重载的ListFiles方法,允许我们传入一个文件过滤器FileFilter,然后将满足过滤器要求
* 的子项获取回来
*
*/
public class ListFileDemo2 {
public static void main(String[] args) {
//获取当前目录中所有名字含有"s"的子项
File dir = new File(".");
if(dir.isDirectory()){
MyFilter filter = new MyFilter();
/*
重载的listFiles方法内部会使用给定的过滤器,将目录中所有子项都传入给过滤
器的方法accept,并将返回值为true的子项最终返回
*/
File[] subs = dir.listFiles(filter);
System.out.println(subs.length);
for(int i=0;i<subs.length;i++){
System.out.println(subs[i].getName());
}
}
}
}
class MyFilter implements FileFilter{
public boolean accept(File file) {
String fileName = file.getName();
// int index = fileName.indexOf("s");
// return index !=-1;
//String 的contains方法是判断字符串是否包含给定的内容
return fileName.contains("s");
}
}
第二种写法
package file;
import java.io.File;
import java.io.FileFilter;
/**
* 使用匿名内部类的形式创建文件过滤器
*
*/
public class ListFilesDemo3 {
public static void main(String[] args) {
//获取当前目录中所有名字里含有"s"的子项
File dir = new File(".");
if(dir.isDirectory()){
File[] subs = dir.listFiles(new FileFilter( ){
public boolean accept(File file) {
return file.getName().contains("s");
}
});
System.out.println(subs.length);
for(int i=0;i<subs.length;i++){
System.out.println(subs[i].getName());
}
}
}
}
10.Filede文件过滤器的lambda写法
lambda表达式 JDK8之后推出的一个新特性
-
使用lambda的直观感受是可以用更精简的语法创建内部类
-
语法
-
(参数列表)->{
-
方法体
-
}
-
lambda表达式实现的接口不需要写接口的名字以及方法的名字。
-
但是要求该接口只能有一个抽象方法
代码如下(示例):
package lambda;
import java.io.File;
import java.io.FileFilter;
/**
*lambda表达式 JDK8之后推出的一个新特性
* 使用lambda的直观感受是可以用更精简的语法创建内部类
*
* 语法
* (参数列表)->{
* 方法体
* }
* lambda表达式实现的接口不需要写接口的名字以及方法的名字。
* 但是要求该接口只能有一个抽象方法
*
*/
public class LambdaDemo1 {
public static void main(String[] args) {
//获取当前目录中含有"s"的子项
File dir = new File(".");
if(dir.isDirectory()){
// FileFilter filter = (f)->{
// return f.getName().contains("s");
// };
FileFilter filter =(f)->f.getName().contains("s");
File[] subs = dir.listFiles(filter);
System.out.println(subs.length);
for(int i=0;i<subs.length;i++){
System.out.println(subs[i].getName());
}
}
}
}
二、RandomAccessFile(上)
1.只读模式
代码如下(示例):
2.读写模式
3.字节数据读写操作
3.1)write(int d)方法
代码展示如下:
3.2)read()方法
返回值的范围为0~255之间,(即低八位11111111),如果返回值为-1,说明已经读取到文件末尾了
代码展示如下:
3.3)write(byte[] d)方法
代码展示如下:
3.4)read(byte[] d)方法
代码展示如下:
代码展示如下:
3.5)close()方法