Java NIO 文件操作的使用Demo

目录

java.nio.file.Path:

java.nio.file.Paths:

java.nio.file.Files:


 

package xyz.jangle.file.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;

/** 
* @author jangle E-mail: jangle@jangle.xyz
* @version 2018年10月21日 上午10:08:11 
* 类说明 
*/
public class OutputStreamTest {
	
	private static String path = "d:/logs/test/a/a/";
	
	private static String fileNameWriter = "JangleTestWriter.txt";

	public static void main(String[] args) {
//		testOutput();
//		testInsertFile();
		testWriter();
		testFilesCopy();
	}
	
	/**
	 * 对Java 7 的NIO的使用Demo
	 */
	private static void testFilesCopy() {
		Path pathFrom = Paths.get(path,fileNameWriter);								// 1.1创建一个Path源
//		Path pathFrom = Paths.get("d:","logs","test","a","a",fileNameWriter);		// 创建一个Path,这种方式跟上面的方式等同。
		Path pathTo = Paths.get(path, "2"+fileNameWriter);	// 1.2创建一个输出Path目标
		try {
			Files.copy(pathFrom, pathTo,StandardCopyOption.REPLACE_EXISTING);	//1.3使用NIO复制文件, Option参数含义:若存在则替换
			List<String> lines = Files.readAllLines(pathTo);		// 2.1获取目标文件文本内容的所有行。(使用NIO直接获取文本内容,并输出)
			System.out.print("pathTo  的文件内容:");
			for(String line:lines) {
				System.out.println(line);	//2.2输出目标文件所有行内容
			}
			InputStream inputStream = Files.newInputStream(pathFrom);		//3.1通过路径获取源文件 输入流 (使用NIO获取输入流,再进行内容获取,并输出。)
			byte[] b = new byte[inputStream.available()];
			inputStream.read(b);	// 3.2通过输入流,将字节读入字节数组中。
			System.out.print("pathFrom的文件内容:");
			System.out.println(new String(b,StandardCharsets.UTF_8));		//3.3将原本的文本字节进行编码成字符串输出。
			System.out.println("1.5的目标文件内容和2.3的源文件的内容一致。 复制是成功的。");
			
			Files.delete(pathTo);	//4.1使用NIO删除目标文件
			boolean existsPathTo = pathTo.toFile().exists();	//4.2将Path转换为File对象,并判断是否存在文件。
			System.out.println("执行删除后,pathTo对应的文件是否存在:"+existsPathTo);
			Files.move(pathFrom, pathTo);	//4.3使用NIO将文件进行移动
			System.out.println("执行移动后,pathTo  对应的文件是否存在:"+pathTo.toFile().exists());
			System.out.println("执行移动后,pathFrom对应的文件是否存在:"+pathTo.toFile().exists());
			Files.move(pathTo, pathFrom);	//移动回来
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 使用Writer进行文本内容输入。
	 */
	private static void testWriter() {
		File filePath = new File(path);
		if(!filePath.exists()) {
			filePath.mkdirs();
		}
		File file = new File(path+fileNameWriter);
		try {
			FileOutputStream out = new FileOutputStream(file,true);	//第二个参数表示是否添加
			OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out,StandardCharsets.UTF_8);
			PrintWriter printWriter = new PrintWriter(outputStreamWriter);
			printWriter.print("欢迎访问http://jangle.xyz");
			printWriter.flush();
			printWriter.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		System.out.println("ok"); 
	}
	
	

}

 

主要是对 Path接口 和 Files类的使用。

java.nio.file.Path:

路径,表示的是一个目录名序列,其后还可以跟着文件名。

java.nio.file.Paths:

Paths.get(String first,String ...):将参数拼接,返回一个Path对象。即路径或者文件。

java.nio.file.Files:

使普通文件操作变得快捷,更容易地读取文件的所有内容。

Files.copy(Path pathFrom,Path pathTo,CopyOption ...):复制(常用的CopyOption实现StandardCopyOption )

Files.move(Path pathFrom,Path pathTo,CopyOption ...):移动

Files.delete(Path path):删除

Files.newInputStream(Path path):获取新的输入流

Files.newOutputStream(Path path):获取新的输出流

 

java.nio.file.Files

static byte[] readAllBytes(Path path) :读取文件所有内容

static String readString(Path path, Charset charset):根据指定字符编码读取文件文本内容。

static List<String> readAllLines(Path path,Charset charset):根据指定字符编码按行读取文件文本内容。

static Path write(Path path,byte[] contents, OpenOption... options):将字节数组内容写入到指定path文件中。

static Path write(Path path,String contents, Charset charset, OpenOption... options):将字符串按照指定字符编码输出至指定path文件中。

 

InputStream/OutputStream API:https://blog.csdn.net/Bof_jangle/article/details/113783654

参考文献:Java核心技术 卷II (原书第11版)P86-93

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值