Java文件管理操作

linux里有mkdir、rm、cp、mv、touch等对文件或目录进行操作的命令,Java中也有对应的方法。

Path和Files类封装了处理文件系统所需的所有功能。比如,可以用Files类删除或重命名文件,或者查询文件最后被修改的时间等。换句话说,流类关心的是文件的内容,而Files类关心的是对文件和目录的操作。

Path和Files是在Java SE 7中新添加进来的类,比自JDK 1.0以来就一直使用的File类要方便得多。

java.nio.file.Paths 7

Path表示的是文件或目录的路径。是一个字符串。

  • java.nio.file.Paths
    • static Path get(String first, String…more)
Path dir = Paths.get("/Users/linbingdong","Downloads","xxx.txt");

Paths.get方法通过给定的字符串创建一个路径。该方法可以接受一个或多个字符串,并自动将它们用默认文件系统的路径分隔符连接起来。

要操作文件或目录之前,都需要先用Paths.get方法生成相应的路径。

java.nio.file.Files 7

Files类使得普通文件操作变得快捷。

  • java.nio.file.Files
    • static byte[] readAllBytes(Path path)
    • static Path write(Path path, byte[] contents, OpenOption…options)
    • static Path copy(Path from, Path to, CopyOption…options)
    • static Path move (Path from, Path to, CopyOption…options)
    • static void delete(Path path)
    • static Path createFile(Path path, FileAttribute<?>… attrs)
    • static Path createDirectory(Path path, FileAttribute<?>…attrs)
    • static Path createDirectories(Path path, FileAttribute<?>…attrs)
    • static boolean exists(Path path)
    • static boolean isReadable(Path path)
    • static boolean isDirectory(Path path)

要读入文件内容是,首先将文件内容以字节的方式读入字节数组,再将字节数组作为参数传入新建的String对象。

要将String写入文件,需要调用String.getBytes()。

具体各方法的用法见示例

示例:

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.*;
/**
* Created by lbd on 2017/1/5.
*/
public class TestFile {
public static void main(String[] args) throws IOException {
Path from = Paths.get("/Users/linbingdong/hehe");
Path to = Paths.get("/Users/linbingdong/hehe2");
Path newDir = Paths.get("/Users/linbingdong/test","hi","hei","oo");
//Files.copy(from,to);
Files.createDirectories(newDir);
//Files.copy(from,newDir, StandardCopyOption.COPY_ATTRIBUTES,StandardCopyOption.REPLACE_EXISTING);
//Files.move(from,to);
System.out.println(newDir.getParent());
System.out.println(newDir.getRoot());
System.out.println(newDir.getFileName()); //获取路径中最后一个字段,不管是目录还是文件
System.out.println(newDir.getFileSystem());
System.out.println(newDir.getNameCount()); //路径层级的个数
byte[] bytes = Files.readAllBytes(to); //获取文本内容存入byte数组
String contents = new String(bytes, Charset.defaultCharset()); //将byte数组转化成String对象
System.out.println(contents);
Files.write(to,contents.getBytes()); //覆盖写 获取String对象对应的byte数组
//Files.write(to,contents.getBytes(), StandardOpenOption.APPEND); //追加写
//Files.delete(newDir);
Files.createDirectories(newDir); //创建路径中的所有中间目录 相当于mkdir -p
Path newFile = Paths.get("/Users/linbingdong/test","hi","hei","oo","hhhh");
//Files.createFile(newFile); //创建一个新文件 最后是文件名
System.out.println(Files.exists(newFile)); //判断是否存在
System.out.println(Files.size(newFile)); //返回文件的字节数
System.out.println(Files.isDirectory(newFile)); //判断是否是文件夹
Path basePath = Paths.get("/Users/linbingdong/test");
try(DirectoryStream<Path> entries = Files.newDirectoryStream(basePath)) { //迭代目录中的文件
for (Path entry: entries) {
System.out.println(entry.getFileName());
}
}
}
}

注:
以上的方法适用于处理中等长度文本文件,如果要处理的文件较大,或者是二进制文件,那么还是应该使用所熟知的流或者读入器、写出器

InputStream in = Files.newInputStream(Path);
OutputStream out = Files.newOutputStream(Path);
Reader in = Files.newBufferedReader(Path,charset);
Writer out = Files.newBufferedWriter(path,charset);

欢迎关注公众号: FullStackPlan 获取更多干货

Copyright © 2016 - 2017 LBD All Rights Reserved.

访客数 : | 访问量 :