Java实用文件操作

 

文件过滤器接口FileFilter

/*
* FileFilter只有一个抽象方法,
* 是一个函数式接口,可以使用lambda表达式。
* 该方法会过滤掉file目录中不包含we(不区分大小写)的文件和文件夹
* */
File[] files = file.listFiles(
p->{
     return p.getName().toUpperCase().contains("WE");
});

 

Files类对文件输入输出

//显式产生输入输出流对文件进行读取写入
Path path = Paths.get("123.txt");
InputStream in = Files.newInputStream(path);
byte[] bytes = new byte[1024];
while(in.read(bytes)!= -1){
   System.out.print(new String(bytes));
}

OutputStream out = Files.newOutputStream(path);
out.write(bytes);

//直接对文件进行读取写入
byte[] bytes1 = {1,2,3};
Files.write(path,bytes);
List<String> filelist= Files.readAllLines(path);
byte[] bytes2 =Files.readAllBytes(path);

 

Files类创建临时文件和目录

/*
* Files创建临时文件或目录
* */
Path path1 = Paths.get("D:/JAVA");
/*
* 创建临时文件:
* 第一个参数为Path是可选参数,如果存在即在Path目录下产生临时文件
* 并返回Path对象
* */
Path path2 = Files.createTempFile(path1,null,".txt");

/*
*创建临时目录:
* 第一个参数为可选参数。效果通创建文件一样。
* */
Path path3 = Files.createTempDirectory(path1,"myfile");

 

Files类对文件的复制,移动和删除

    Path path1 = Paths.get("456.txt");
    Path path2 = Paths.get("/JAVA/456.txt");
    Files.copy(path1,path2); //返回复制文件的Path对象
    /*
    * 还可以将文件复制到输出流
    * 或者从输入流获取并产生文件
    * */
    Files.copy(path1,OutputStream out);
    Files.copy(InputStream in,path2);

/*
* 文件移动和删除
* */
Path path1 = Paths.get("456.txt");
Path path2 = Paths.get("/JAVA/456.txt");
Files.move(path1,path2);//返回移动后的文件Path对象
Files.delete(path2);//文件删除

 

文件属相集

/*
* 文件属性集(有七中视图与属性集)
* 通过文件属性集可访问文件的相关信息
* */
BasicFileAttributeView basicview = Files.getFileAttributeView(path,BasicFileAttributeView.class);
BasicFileAttributes basic1 = basicview.readAttributes();
BasicFileAttributes basic2 =  Files.readAttributes(path, BasicFileAttributes.class);

 

Files类对文件树的访问和文件访问器接口

/*
* 文件访问器接口FileVisitor
* 1.FileVisitResult(枚举值)
* 2.FileVisitResult preVisitDirectory(T dir,BasicFileAttributes attribs)访问目录前调用,该目录的属性传递给第二个参数。
* 3.FileVisitResult postVisitDirectory(T dir,IOException exception)访问目录后调用,第二个参数包含访问过程中产生的异常。
* 4.FileVisitResult visiFile(T file ,BasicFileAttributes attribs)访问文件时调用,该文件的属性传递给第二个参数。
* 5.FileVisitResult visiFileFailed(T file ,IOException exception)访问文件失败调用,第二个参数包含访问过程中产生的异常。
* */

/*
* 用访问器接口的实现类来实例化接口,
* 这时我们就可以重写自己想要的方法.
* FileVisitResult(枚举值):
* 1.FileVisitResult.CONTINUE : 继续访问下一个文件或目录
* 2.FileVisitResult.SKIP_SIBLINGS : 跳过对其兄弟目录或文件的访问
* 3.FileVisitResult.SKIP_SUBTREE : 跳过对当前目录子目录的访问
* 4.FileVisitResult.TERMINATE : 结束文件访问
* */
FileVisitor<Path> visitor = new SimpleFileVisitor<>(){
    public FileVisitResult preVisitDirectory(Path dir,BasicFileAttributes attributes){
        System.out.println("将要访问的目录是"+dir);
        return FileVisitResult.CONTINUE;
    }

    public FileVisitResult visitFile(Path dir,BasicFileAttributes attributes){
        System.out.println("正在访问的文件是"+dir);
        return FileVisitResult.CONTINUE;
    }
};

Path path = Paths.get("/");
//以文件访问器定义的访问形式遍历Path目录下的文件树
Files.walkFileTree(path,visitor);

 

Files类将文件浏览转化为流操作

Path path = Paths.get("123.txt");
Stream<Path> stream1 = Files.list(path);
Stream<Path> stream2 = Files.walk(path);

 

posted @ 2018-12-15 16:12  问月晚安  阅读(168)  评论(0编辑  收藏  举报