java 如何读取文件_java中如何读取文件?

96445ca831ef0c6a906914d7f3f9c697.png

读取文件有多种方式,基于传统的输入流方式或基于nio的Buffer缓冲对象和管道读取方式甚至非常快速的内存映射读取文件。

java中四种读取文件方式:(推荐:java视频教程)

1、RandomAccessFile:随机读取,比较慢优点就是该类可读可写可操作文件指针

2、FileInputStream:io普通输入流方式,速度效率一般

3、Buffer缓冲读取:基于nio Buffer和FileChannel读取,速度较快

4、内存映射读取:基于MappedByteBuffer,速度最快

RandomAccessFile读取//RandomAccessFile类的核心在于其既能读又能写

public void useRandomAccessFileTest() throws Exception {

RandomAccessFile randomAccessFile = new RandomAccessFile(new File("e:/nio/test.txt"), "r");

byte[] bytes = new byte[1024];

int len = 0;

while ((len = randomAccessFile.read(bytes)) != -1) {

System.out.println(new String(bytes, 0, len, "gbk"));

}

randomAccessFile.close();

}

FielInputStream读取//使用FileInputStream文件输入流,比较中规中矩的一种方式,传统阻塞IO操作。

public void testFielInputStreamTest() throws Exception {

FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt"));

// 使用输入流读取文件,以下代码块几乎就是模板代码

byte[] bytes = new byte[1024];

int len = 0;

while ((len = inputStream.read(bytes)) != -1) {// 如果有数据就一直读写,否则就退出循环体,关闭流资源。

System.out.println(new String(bytes, 0, len, "gbk"));

}

inputStream.close();

}

Buffer缓冲对象读取// nio 读取

public void testBufferChannel() throws Exception {

FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt"));

FileChannel fileChannel = inputStream.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(1024);

// 以下代码也几乎是Buffer和Channle的标准读写操作。

while (true) {

buffer.clear();

int result = fileChannel.read(buffer);

buffer.flip();

if (result == -1) {

break;

}

System.out.println(new String(buffer.array(), 0, result, "gbk"));

}

inputStream.close();

}

内存映射读取public void testmappedByteBuffer() throws Exception {

FileInputStream inputStream = new FileInputStream(new File("e:/nio/test.txt"));

FileOutputStream outputStream = new FileOutputStream(new File("e:/nio/testcopy.txt"),true);

FileChannel inChannel = inputStream.getChannel();

FileChannel outChannel = outputStream.getChannel();

System.out.println(inChannel.size());

MappedByteBuffer mappedByteBuffer = inChannel.map(MapMode.READ_ONLY, 0, inChannel.size());

System.out.println(mappedByteBuffer.limit());

System.out.println(mappedByteBuffer.position());

mappedByteBuffer.flip();

outChannel.write(mappedByteBuffer);

outChannel.close();

inChannel.close();

outputStream.close();

inputStream.close();

}

//基于内存映射这种方式,这么写好像有问题。

MappedByteBuffer和RandomAcessFile这两个类要单独重点研究一下。

//TODO 大文件读取

更多java知识请关注java基础教程栏目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值