zoukankan      html  css  js  c++  java
  • Java 基础 (NIO)

    Java NIO 概述

    Java NIO (New IO,Non-Blocking IO) 是从 Java 1.4 版木开始引入的一套新的IO API,可以替代标准的 Java IO APi。NIO 与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。
    Java API 中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。

    早期的 Java 只提供了一个 File 类来访问文件系统,但 File 类的功能比较有限,所提供的方法性能也不高。而且,大多数方法在出错时仅返回失败,并不会提供异常信息。

    NIO.2 为了弥补这种不足,引入了 Path 接口,代表一个平台无关的平台路径,描述了目录结构中文件的位置。Path 可以看成是 File类 的升级版木,实际引用的资源也可以不存在。

    同时,NIO.2 在 java.nio.file 包下还提供了 Files、Paths 工具类,Files 包含了大量静态的工具方法来操作文件;Paths 则包含了两个返回 Path 的静态工厂方法。

    PatchTest.java

    package com.klvchen.java;
    
    import org.junit.Test;
    
    import java.io.File;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    public class PatchTest {
    
        //如何使用 Paths 实例化 Path
        @Test
        public void test1(){
            Path path1 = Paths.get("G:\\tmp\\nio\\hello.txt");
    
            Path path2 = Paths.get("G:\\", "nio\\hello.txt");
    
            System.out.println(path1);
            System.out.println(path2);
    
            Path path3 = Paths.get("G:\\", "nio");
            System.out.println(path3);
        }
    
        @Test
        public void test2(){
            Path path1 = Paths.get("G:\\", "tmp\\nio\\hello.txt");
            Path path2 = Paths.get("hello.txt");
    
            // String toString():返回调用Path对象的字符串表示形式
            System.out.println(path1);
    
            // boolean startsWith(String path):判断是否以 path路径开始
            System.out.println(path1.startsWith("G:\\tmp"));
    
            // boolean endsWith(String path): 判断是否以 path 路径结束
            System.out.println(path1.endsWith("hello.txt"));
    
            // boolean isAbsolute():判断是否是绝对路径
            System.out.println(path1.isAbsolute() + "~");
            System.out.println(path2.isAbsolute() + "~");
    
            // Path getParent() :返回Path对象包含整个路径,不包含Path对象指定的文件路径
            System.out.println(path1.getParent());
            System.out.println(path2.getParent());
    
            // Path getRoot() :返回调用Path对象的根路径
            System.out.println(path1.getRoot());
            System.out.println(path2.getRoot());
    
            // Path getFileName() :返回与调用 Path对象关联的文件名
            System.out.println(path1.getFileName() + "~");
    
            // Path getName(int idx) :返回指定索引位置 idx 的路径名称
            for (int i = 0; i < path1.getNameCount(); i++) {
                System.out.println(path1.getName(i) + "*****");
            }
    
            // Path toAbsolutePath():作为绝对路径返回调用Path对象
            System.out.println(path1.toAbsolutePath());
            System.out.println(path2.toAbsolutePath());
    
            // Path resolve(Path p):合并两个路径,返回合并后的路径对应的Path对象
            Path path3 = Paths.get("G:\\", "tmp");
            Path path4 = Paths.get("nioo\\hi.txt");
            path3 = path3.resolve(path4);
            System.out.println(path3);
    
            // File toFile(): 将 Path 转化为File类的对象
            File file = path1.toFile(); // Path ---> File的转换
            Path newPath = file.toPath(); //File ---> Path的转换
        }
    }
    
    

    导入第三方包:commons-io-2.5.jar

    FileUtilsTest.java

    package com.klvchen.java;
    
    import org.apache.commons.io.FileUtils;
    
    import java.io.File;
    import java.io.IOException;
    
    public class FileUtilsTest {
    
        public static void main(String[] args) {
            File srcFile = new File("day10\\1.png");
            File destFile = new File("day10\\3.png");
    
            try {
                FileUtils.copyFile(srcFile, destFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  • 相关阅读:
    存储用户当前的地理坐标,不要用string ,直接用float即可。string无法保持数据,原因暂不明
    让百度地图只再应用程序启动时,仅取一次用户坐标信息
    ygm900常用网站
    重置一个画面大小的方法
    代码的世界中,一个逻辑套着另外一个逻辑,如何让每一种逻辑在代码中都有迹可循?
    Multiview Applications(多个xib之前的切换) view controller和xib文件是如何关联在一起的 (手动关联 view controller和xib文件)
    一键让应用程序适配 iphone5
    UISCrollView 与 UIPageControl 之间产生联系,就靠这句代码pageControl0.currentPage = page;
    集中“验证”的思想
    静听夜雨
  • 原文地址:https://www.cnblogs.com/klvchen/p/15516531.html
Copyright © 2011-2022 走看看