Java 基础 (NIO)

2021/11/6 22:09:38

本文主要是介绍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();
        }
    }
}


这篇关于Java 基础 (NIO)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程