Java IO/NIO多种读写文件方式
Java对文件的读写分为了基于阻塞模式的IO和非阻塞模式的NIO,将列举一些常用语读写文件的方式。
通常读写文件都是使用的阻塞模式,对应的是java.io.FileSystem。java.io.FileInputStream类提供了对文件的读取功能。Java的其他读取文件的方法基本上都是封装了java.io.FileInputStream类,如:java.io.FileReader。
FileInputStream
使用FileInputStream实现文件读取Demo
package com.anbai.sec.filesystem;import java.io.*;public class FileInutStreamDemo {public static void main(String[] args) throws IOException {File file = new File("c:\\Windows\\win.ini");// 打开文件对象并创建文件输入流FileInputStream fis = new FileInputStream(file);// 定义每次输入流读取到的字节数对象int a = 0;// 定义缓冲区大小byte[] bytes = new byte[1024];//创建二进制输出流对象ByteArrayOutputStream out = new ByteArrayOutputStram();// 循环读取文件内容while ((a = fis.read(bytes)) != -1) {//截取缓冲区数组中的内容,(bytes, 0, a)其中的0标识从bytes数组的下标0开始截取//a标识输入流read到的字节数。out.wirte(byte(bytes, 0, a);)}System.out.println(out.toString());}}
FileOutputStream
使用FileOutStream实现写文件Demo:
package com.anbai.sec.filesystem;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class FileOutputStreamDemo {public static void mian(String[] args) throws IOException {//定义写入文件路径File file = new File("E:\\1.txt");//定义待写入文件内容String content = "hello World.";// 创建FileOutputstream对象FileOutputStream fos = new FileOutputStream(file);//写入二进制到文件fos.write(content.getBytes());fos.flush();fos.close();}}
RandomAccessFile
java.io.RandomAccessFile 顾名思义,就是任意文件内容访问
特点:类似java.io.FileInputStream一样读取文件,而且还可以写文件。
package com.anbai.sec.filesystem;import java.io.*;public class RandomAccessFileDemo {public static void main(String[] args) {File file = new File("/etc/passwd");try {// 创建RandomAccessFile对象,r表示以只读模式打开文件,一共有:r(只读)、rw(读写)、// rws(读写内容同步)、rwd(读写内容或元数据同步)四种模式。RandomAccessFile raf = new RandomAccessFile(file, "r");// 定义每次输入流读取到的字节数对象int a = 0;// 定义缓冲区大小byte[] bytes = new byte[1024];// 创建二进制输出流对象ByteArrayOutputStream out = new ByteArrayOutputStream();// 循环读取文件内容while ((a = raf.read(bytes)) != -1) {// 截取缓冲区数组中的内容,(bytes, 0, a)其中的0表示从bytes数组的// 下标0开始截取,a表示输入流read到的字节数。out.write(bytes, 0, a);}System.out.println(out.toString());} catch (IOException e) {e.printStackTrace();}}}
FileSystemProvider
JDK7新增的NIO.2的java.nio.FileSystemProvider,利用FileSystemProvider,可以利用支持异步的通道(channel)模式读取文件内容。
package com.anbai.sec.filesystem;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;public class FilesDemo {public static void main(String[] args) {// 通过File对象定义读取的文件路径// File file = new File("/etc/passwd");// Path path1 = file.toPath();// 定义读取的文件路径Path path = Paths.get("/etc/passwd");try {byte[] bytes = Files.readAllBytes(path);System.out.println(new String(bytes));} catch (IOException e) {e.printStackTrace();}}}
