Java中Path和Files类

Java中Path和Files类Java中Path和Files类的使用

Path

Path表示的是一个目录名序列,其后还可以跟着一个文件名。路径中的第一个部件可以是根路径。以根部件开始的路径是绝对路径;否则,就是相对路径。

package FileTest;

import java.nio.file.Path;
import java.nio.file.Paths;

import org.junit.Test;

/** * @Author Lbl * @Date 2022/1/6 18:31 * @Description:Path测试类 */
public class PathTest { 
   

    /** * 构建路径 */
    @Test
    public void test1(){ 
   
         // 绝对路径
        Path absolute = Paths.get("C:\\", "car");
        // 相对路径
        Path relative = Paths.get("myprog", "conf", "user.properties");

        System.out.println(absolute);
        System.out.println(relative);

    }
}

输出如下:输出在这里插入图片描述
静态的Paths.get方法接受一个或多个字符串,并将它们用默认文件系统的路径分隔符(类Unix文件系统是/,Windows是\)连接起来。然后它解析连接起来的结果,如果其表示的不是给定文件系统中的合法路径,那么就抛出InvalidPathException异常。这个连接起来的结果就是一个Path对象。

get方法可以获取包含多个部件构成的单个字符串。

注意:路径不必对应着某个实际存在的文件,它仅仅只是一个抽象的名字序列。你在接下来的小节中将要看到,当你想要创建文件时,首先要创建一个路径,然后才调用方法去创建对应的文件。

组合或解析路径是司空见惯的操作,调用**p.resolve(q)**将按照下列规则返回一个路径:

  • 如果q是绝对路径,则结果就是q。
  • 否则,根据文件系统的规则,将“p后面跟着q”作为结果。

resolve方法有一种快捷方式,它接受一个字符串而不是路径:

Path workPath = basePath.resolve("work");

还有一个很方便的方法resolveSibling,它通过解析指定路径的父路径产生其兄弟路径。例如,如果workPath是/opt/myapp/work,那么下面的调用将创建/opt/myapp/temp。

Path tempPath = workPath.resolveSibling("temp")

resolve的对立面是relativize,即调用p.relativize®将产生路径q,对q进行解析会产生r。例如,以“/home/cay”为目标对“/home/fred/myprog”进行相对化操作,会产生“…/fred/myprog”,其中,我们假设…表示文件系统中的父目录。

normalize方法将移除所有冗余的.和 …部件(或者文件系统认为冗余的所有部件)。例如,规范化/home/cay/ …/fred/ ./myprog将产生/home/fred/myprog,

toAbsolutePath方法将产生给定路径的绝对路径,该绝对路径从根部件开始。
API列表:
在这里插入图片描述

Files

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

读取文件的所有内容:

byte[] bytes = Files.readA71Bytes(path);

如果想将文件当作字符串读入,那么可以在调用readA11Bytes之后执行下面的代码;

String content = new String(bytes,charset);

如果希望将文件当作行序列读入,那么可以调用:

List<String> lines = Files.readAllLines(path,charset);

如果希望写出一个字符串到文件中,可以调用:

Files.write(path,content.getBytes(charset));

向指定文件追加内容,可以调用:

Files.write(path,content.getBytes(charset)StandardOpenOPtion.APPEND) ;

还可以用下面的语句将一个行的集合写出到文件中:

Files.write(path,lines);

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

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

这些便捷方法可以将你从处理FileInputStream,Fi1eOutputStream 、BufferedReader和Bufferedwriter的繁复操作中解脱出来。

package FileTest;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;

import org.junit.Test;

import static java.nio.charset.Charset.*;

/** * @Author Lbl * @Date 2022/1/6 18:31 * @Description:Path测试类 */
public class PathTest { 
   

    /** * 构建路径 */
    @Test
    public void test1(){ 
   
        // 绝对路径
        Path absolute = Paths.get("C:\\", "car");
        // 相对路径
        Path relative = Paths.get("myprog", "conf", "user.properties");
        Path relative2 = Paths.get("myprog", "conf", "user.properties");
        System.out.println(absolute);
        System.out.println(relative);
    }

    @Test
    public void test2() throws IOException { 
   
        // 读入
        Path path1 = Paths.get("D:\\","aaa.txt");
        System.out.println("path1: " + path1);
        // 读取所有内容
        byte[] bytes = Files.readAllBytes(path1);
        System.out.println("bytes: " + bytes);
        // 当作字符串读入
        String content1 = bytes.toString();
        System.out.println("content1: " + content1);
        // 按行序列读入
        List<String> lines = Files.readAllLines(path1, defaultCharset());
        lines.stream().forEach(System.out::println);


        // 输出
        Path path2 = Paths.get("D:\\","bbb.txt");
        String content2 = "西游记";
        // 写出一个字符串到文件中
        Files.write(path2, content2.getBytes(defaultCharset()));
        // 向指定文件追加内容
        String content3 = "红楼梦,万国志,三国演义";
        Files.write(path2,content3.getBytes(defaultCharset()), StandardOpenOption.APPEND);
        // 将一个行的集合写出到文件中
        Path path3 = Paths.get("D:\\","ccc.txt");
        Files.write(path3,lines);

    }
}

输出如下:在这里插入图片描述

aaa内容:在这里插入图片描述
bbb内容:
在这里插入图片描述
ccc内容在这里插入图片描述
API列表:
在这里插入图片描述

今天的文章Java中Path和Files类分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33872.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注