1.Buffer相关
一般使用CharBuffer和ByteBuffer,三个重要的概念:容量(capacity)、界线(limit)和位置(position);两个重要方法:flip()为读数据做好准备、clear()为再次装入数据做准备。
/*
* BufferTest.java
* Version 1.0.0
* Created on 2019年12月6日
* Copyright wkay
*
*/
package crazyjava_nio;
import java.nio.CharBuffer;
/**
* @author wkay
* @version 1.0.0
* @since
* 创建时间:2019年12月6日
* 功能描述:
* 博客:https://me.csdn.net/qq_43502142
* 邮箱:wkays60@163.com
*/
public class BufferTest {
/**
* @param args
*/
public static void main(String[] args) {
// 创建Buffer
CharBuffer buffer=CharBuffer.allocate(8);
System.out.println("capacity: "+buffer.capacity());
System.out.println("limit: "+buffer.limit());
System.out.println("position: "+buffer.position());
//放入元素
buffer.put("a");
buffer.put("b");
buffer.put("c");
System.out.println("放入三个元素后的position: "+buffer.position());
//调用flip()方法
buffer.flip();
System.out.println("执行flip()后的position: "+buffer.position()+".limit: "+buffer.limit());
//取出元素
System.out.println(buffer.get());
System.out.println("取出元素后的position: "+buffer.position());
//调用clear()方法
buffer.clear();
System.out.println("执行clear()后的position: "+buffer.position()+".limit: "+buffer.limit());
System.out.println(buffer.get(2));
}
}
2.Path和Paths相关
NIO.2引入Path接口。
/*
* PathTest.java
* Version 1.0.0
* Created on 2019年12月7日
* Copyright wkay
*
*/
package crazyjava_nio2;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* @author wkay
* @version 1.0.0
* @since
* 创建时间:2019年12月7日
* 功能描述:
* 博客:https://me.csdn.net/qq_43502142
* 邮箱:wkays60@163.com
*/
public class PathTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
Path path=Paths.get(".");//以当前路径来创建Path对象
System.out.println("Path里包含的路径数量: "+path.getNameCount());
System.out.println("Path的根路径: "+path.getRoot());
Path aPath=path.toAbsolutePath();//获取path对应的绝对路径
System.out.println(aPath);
System.out.println("aPath的根路径 "+aPath.getRoot());
Path path2=Paths.get("F:","workspace");
System.out.println(path2);
}
}
3.File和Files相关
Files类是一个高度封装的工具类,可完成文件复制、读取文件内容、写入文件等功能,可简化IO操作。
/*
* FilesTest.java
* Version 1.0.0
* Created on 2019年12月7日
* Copyright wkay
*
*/
package crazyjava_nio2;
import java.io.FileOutputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
/**
* @author wkay
* @version 1.0.0
* @since
* 创建时间:2019年12月7日
* 功能描述:
* 博客:https://me.csdn.net/qq_43502142
* 邮箱:wkays60@163.com
*/
public class FilesTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
Path path=Paths.get("F:\\workspace\\src\\crazyjava_nio2\\FilesTest.java");
//复制文件
Files.copy(path, new FileOutputStream("a.txt"));
//一次性读取文件所有行
List<String> lines=Files.readAllLines(path,Charset.forName("GBK"));
for(var line:lines) {
System.out.println(line);
}
//判断文件的大小
System.out.println("文件大小为: "+Files.size(path));
//直接将多个字符串内容写入指定文件中
List<String> poem=new ArrayList<>();
poem.add("八月秋高风怒号");
poem.add("卷我屋上三重茅");
Files.write(Paths.get("peom.txt"), poem, Charset.forName("GBK"));
//使用java8新增的Stream API读取文件内容
Files.lines(Paths.get("peom.txt"),Charset.forName("GBK")).forEach(line->System.out.println(line));
}
}