1)操作文件
Path和Files是在JavaSE7中新添加进来的类,它们封装了在用户机器上处理文件系统所需的所有功能。Path表示的一个目录名序列,其后还可以跟着一个文件名。路径中的第一个参数可以是根路径,以根路径开始的路径是绝对路径,否则就是相对路径。如果其路径不是合法路径则会抛出InvalidPathException异常。
绝对路径:
Path path=Paths.get("G:\\", "temp","temp.txt");
相对路径:
Path path2=Paths.get("temp", "temp.txt");
1.1组合或解析路径是司空见惯的操作,调用p.resolve(q)将按照下列规则返回一个路径:
A.如果q是绝对路径,则结果就是q
B.否则根据文件系统的规则将p后面跟着q作为结果
例子:
Path p=Paths.get("G:\\", "temp"); Path q=Paths.get("temp.txt"); Path path=p.resolve(q); System.out.println(path); //结果:G:\temp\temp.txt p=Paths.get("G:\\"); q=Paths.get("H:\\","temp"); path=p.resolve(q); System.out.println(path); //结果:H:\temp
2)读写文件
Files类是普通文件操作变得快捷,但是比较适合处理中等长度的文件,如果要处理的文件长度比较大,或者二进制文件,那么还是应该使用熟知的流(Stream)或者读入器(Reader)/写出器(Writer)。
Files的readAllBytes方法读取文件返回字节数,readAllLines返回一个String类型的列表,调用write方法写入字节组或者String类型的列表。
例子:
//字节数组写入文件内容 Path q=Paths.get("G:\\","temp.txt"); Files.write(q, "123123".getBytes("UTF-8")); //读出字节数组并打印出来 byte[]b=Files.readAllBytes(q); System.out.println(new String (b)); //字符串写入文件内容 List<String>linesList=new ArrayList<String>(); linesList.add("11111111111111"); linesList.add("22222222222222"); linesList.add("33333333333333"); Files.write(q, linesList); //打印读取的数据 List<String>lineStrings=Files.readAllLines(q); for (String itemString : lineStrings) { System.out.println(itemString); }
3)复制、移动和删除文件
Files提供很方便复制、移动、删除文件的方法,Files.copy(FromPaht,toPath),Files.move(fromPath,ToPath),Files.deleteIfExists(path),三个方法中可以增加一个StandardCopyOption枚举参数(REPLACE_EXISTING,COPY_ATTRIBUTES,ATOMIC_MOVE)。
// 复制文件到指定路径 Path path=Paths.get("G:\\", "temp.txt"); Path path2=Paths.get("H:\\","temp.txt"); Files.copy(path, path2, StandardCopyOption.REPLACE_EXISTING); // 移动文件到指定路径(StandardCopyOption.ATOMIC_MOVE不允许跨磁盘移动文件,去掉其选项可以跨磁盘移动文件) Path path3=Paths.get("F:\\", "temp.txt"); Files.move(path2, path3, StandardCopyOption.ATOMIC_MOVE); // 删除文件(最好使用deleteIfExists方法删除文件,不建议使用delete方法删除文件,因为若文件不存在报异常) boolean isDelete=Files.deleteIfExists(path3);
4)获取文件信息
Files的一些静态方法获取文件的相关属性,例如:exists(文件是否存在),isHidden(是否是隐藏文件),isReadable(是否可以读),isWriteable(是否可写),isExecutable(是否是可执行文件),isRegularFile(是否是普通文件),isDirectory(是否是目录),isSymbolicLink(是否是符号链接)。当然readAttributes方法可以获取更多的属性例如最后访问时间,修改时间等在此不举例说明了。