java新特性--path

Path 类是jdk7新增加的特性之一,用来代替java.io.File类。 
之所以新增这个类,是由于java.io.File类有很多缺陷: 
1.java.io.File类里面很多方法失败时没有异常处理,或抛出异常 
java.io.File.delete()方法返回一个布尔值指示成功或失败但是没有失败原因 

2.Path 速度快,方便。


原文地址:http://blog.csdn.net/LuoZheng4698729/article/details/51697648

Path 操作

1.删除文件 
这里写图片描述 
2.遍历目录,不包括子目录的文件

    Path dir = Paths.get("F:\\LZ\\pdf");
    DirectoryStream<Path> stream = Files.newDirectoryStream(dir);
    for(Path path : stream){
        System.out.println(path.getFileName());
    }
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

2.遍历目录,及其子目录下的文件

    Path dir = Paths.get("F:\\LZ\\pdf");
    Files.walkFileTree(dir,new SimpleFileVisitor<Path>(){
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                throws IOException {
            if(file.toString().endsWith(".pdf")){
                System.out.println(file.getFileName());
            }
            return super.visitFile(file, attrs);
        }
    });
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.创建多级目录

    Path dir = Paths.get("F:\\LZ\\xx\\dd");
    Files.createDirectories(dir);
  
  
  • 1
  • 2

4.创建文件, 不存在则抛出异常

    Path dir = Paths.get("F:\\LZ\\xx\\dd\\1.txt");
    Files.createFile(dir);
  
  
  • 1
  • 2

5.文件的复制

    Path src = Paths.get("F:\\LZ\\xx\\dd\\1.txt");
    Path target = Paths.get("F:\\LZ\\xx\\dd\\2.txt");

    //REPLACE_EXISTING:文件存在,就替换
    Files.copy(src, target,StandardCopyOption.REPLACE_EXISTING);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

6.一行一行读取文件

    Path src = Paths.get("F:\\LZ\\xx\\dd\\1.txt");
    BufferedReader reader = Files.newBufferedReader(src,StandardCharsets.UTF_8);
    String line ;
    while((line=reader.readLine()) != null){
        System.out.println(line);
    }
    reader.close();
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

7.写入字符串

    Path src = Paths.get("F:\\LZ\\xx\\dd\\1.txt");
    BufferedWriter writer = Files.newBufferedWriter(src, StandardCharsets.UTF_8
            ,StandardOpenOption.APPEND); // 追加
    writer.write("hello word Path");
    writer.close();
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

8.二进制 读写 与字符串类似

  1. 一个方法直接去取字符串 和 二进制流
    // 字符串
    Path src = Paths.get("F:\\LZ\\xx\\dd\\1.txt");
    for(String line : Files.readAllLines(src)){
        System.out.println(line);
    }
    // 二进制流
    byte[] bytes = Files.readAllBytes(src);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

10.监测是否 目录下的 文件,目录 被修改,创建,或删除. 
这里写图片描述

11.读取文件的 最后 1000 个字符 
这里写图片描述


原文地址:http://blog.csdn.net/zpf336/article/details/45074445
官方API: http://docs.oracle.com/javase/7/docs/api/

官方文档:http://docs.oracle.com/javase/7/docs/index.html

在我学习使用lucene5.0的时候发现用到了Path,怎么点都点不进去,后来在网上查到是JDK7里边的东西,然后自己去获取Path对象却又不知道怎么获取,所以就去查找如何获取Path,就找到了这篇文章,亲自示范通过,然后发表一下希望能有所帮助。

例子如下:

[java]  view plain  copy
  1. package com.darren.test.jdk7;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.IOException;  
  6. import java.nio.charset.Charset;  
  7. import java.nio.file.FileSystems;  
  8. import java.nio.file.Files;  
  9. import java.nio.file.Path;  
  10. import java.nio.file.Paths;  
  11.   
  12. /** 
  13.  * Path是java1.7的nio.file包中的文件 操作的重要切入点,作为基础有必要了解下 
  14.  */  
  15. public class PathTest {  
  16.     public static void main(String[] args) {  
  17.         // 获得path方法一,F:/test/jdk7/test.txt  
  18.         Path path = FileSystems.getDefault().getPath("F:/test/jdk7""test.txt");  
  19.         // 打印文件的所在的节点层数  
  20.         System.out.println(path.getNameCount());  
  21.   
  22.         // 获得path方法二,用File的toPath()方法获得Path对象  
  23.         File file = new File("F:/test/jdk7/test.txt");  
  24.         Path pathOther = file.toPath();  
  25.         // 0,说明这两个path是相等的  
  26.         System.out.println(path.compareTo(pathOther));  
  27.   
  28.         // 获得path方法三  
  29.         Path path3 = Paths.get("F:/test/jdk7""test.txt");  
  30.         System.out.println(path3.toString());  
  31.   
  32.         // join two paths  
  33.         Path path4 = Paths.get("F:/test/jdk7");  
  34.         System.out.println("path4: " + path4.resolve("test.txt"));  
  35.         System.out.println("--------------分割线---------------");  
  36.   
  37.         try {  
  38.             if (Files.isReadable(path)) {  
  39.                 // 注意此处的newBufferedRead的charset参数,如果和所要读取的文件的编码不一致,则会抛出异常  
  40.                 // java的新特性,不用自己关闭流  
  41.                 BufferedReader br = Files.newBufferedReader(path, Charset.defaultCharset());  
  42.                 // new BufferedReader(new FileReader(new File("F:/test/jdk7/test.txt")));  
  43.                 String line = "";  
  44.                 while ((line = br.readLine()) != null) {  
  45.                     System.out.println(line);  
  46.                 }  
  47.             } else {  
  48.                 System.err.println("cannot readable");  
  49.             }  
  50.         } catch (IOException e) {  
  51.             System.err.println("error charset");  
  52.         }  
  53.     }  
  54. }  

运行结果:

[plain]  view plain  copy
  1. 3  
  2. 0  
  3. F:\test\jdk7\test.txt  
  4. path4: F:\test\jdk7\test.txt  
  5. --------------分割线---------------  
  6. I am Darren  




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值