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