您的位置:首页 > 编程语言 > Java开发

java中的File文件读写操作

2014-11-14 14:25 489 查看
Java中常用的文件读写方式

1、普通方式

2、内存映射方式

内存映射方式效率更高,速度也更快!

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.nio.ByteBuffer;

import java.nio.MappedByteBuffer;

import java.nio.channels.FileChannel;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

public class FileCopy {

private DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS");

private Date start_time = null;// 开始时间

private Date end_time = null;// 结束时间

public static void main(String[] args) {

FileCopy demo = new FileCopy();

// demo.operateFile1();

// demo.operateFile2();

demo.operateFile3();

demo.fileCopy1();

demo.fileCopy2();

}

/**

* the first method of reading file

*/

public void operateFile1() {

start_time = new Date();

File f = new File("E:" + File.separator + "test1.txt");// File.separator——windows

// is '\',unix

// is '/'

try {

// 创建一个流对象

InputStream in = new FileInputStream(f);

// 读取数据,并将读取的数据存储到数组中

byte[] b = new byte[(int) f.length()];// 数据存储的数组

int len = 0;

int temp = 0;

while ((temp = in.read()) != -1) {// 循环读取数据,未到达流的末尾

b[len] = (byte) temp;// 将有效数据存储在数组中

len++;

}

System.out.println(new String(b, 0, len, "GBK"));

in.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

end_time = new Date();

System.out.println("==============第一种方式——start_time:"

+ df.format(start_time));

System.out.println("==============第一种方式——end_time:"

+ df.format(end_time));

System.out.println("==============第一种方式总耗时:"

+ (end_time.getTime() - start_time.getTime()) + "毫秒");

}

}

/**

* the second method of reading file

*/

public void operateFile2() {

start_time = new Date();

File f = new File("E:" + File.separator + "test1.txt");

try {

InputStream in = new FileInputStream(f);

byte[] b = new byte[1024];

int len = 0;

while ((len = in.read(b)) != -1) {

System.out.println(new String(b, 0, len, "GBK"));

}

in.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

end_time = new Date();

System.out.println("==================第二种方式——start_time:"

+ df.format(start_time));

System.out.println("==================第二种方式——end_time:"

+ df.format(end_time));

System.out.println("==================第二种方式总耗时:"

+ (end_time.getTime() - start_time.getTime()) + "毫秒");

}

}

/**

* the third method of reading file(文件读取(Memory mapping-内存映射方式))

* 这种方式的效率是最好的,速度也是最快的,因为程序直接操作的是内存

*/

public void operateFile3() {

start_time = new Date();

File f = new File("E:" + File.separator + "test1.txt");

try {

FileInputStream in = new FileInputStream(f);

FileChannel chan = in.getChannel();// 内存与磁盘文件的通道,获取通道,通过文件通道读写文件。

MappedByteBuffer buf = chan.map(FileChannel.MapMode.READ_ONLY, 0,

f.length());

byte[] b = new byte[(int) f.length()];

int len = 0;

while (buf.hasRemaining()) {

b[len] = buf.get();

len++;

}

chan.close();

in.close();

System.out.println(new String(b, 0, len, "GBK"));

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

end_time = new Date();

System.out.println("======================第三种方式——start_time:"

+ df.format(start_time));

System.out.println("======================第三种方式——end_time:"

+ df.format(end_time));

System.out.println("======================第三种方式总耗时:"

+ (end_time.getTime() - start_time.getTime()) + "毫秒");

}

}

/**

* the first method of copying file

*/

public void fileCopy1() {

start_time = new Date();

File f = new File("E:" + File.separator + "test1.txt");

try {

InputStream in = new FileInputStream(f);

OutputStream out = new FileOutputStream("E:" + File.separator

+ "test2.txt");

int len = 0;

while ((len = in.read()) != -1) {

out.write(len);

}

out.close();

in.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

end_time = new Date();

System.out.println("======================第一种文件复制方式——start_time:"

+ df.format(start_time));

System.out.println("======================第一种文件复制方式——end_time:"

+ df.format(end_time));

System.out.println("======================第一种文件复制方式总耗时:"

+ (end_time.getTime() - start_time.getTime()) + "毫秒");

}

}

/**

* 使用内存映射实现文件复制操作

*/

public void fileCopy2() {

start_time = new Date();

File f = new File("E:" + File.separator + "test1.txt");

try {

FileInputStream in = new FileInputStream(f);

FileOutputStream out = new FileOutputStream("E:" + File.separator

+ "test3.txt");

FileChannel inChan = in.getChannel();

FileChannel outChan = out.getChannel();

// 开辟缓冲区

ByteBuffer buf = ByteBuffer.allocate(1024);

while ((inChan.read(buf)) != -1) {

// 重设缓冲区

buf.flip();

// 输出缓冲区

outChan.write(buf);

// 清空缓冲区

buf.clear();

}

inChan.close();

outChan.close();

in.close();

out.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

end_time = new Date();

System.out.println("======================第二种文件复制方式——start_time:"

+ df.format(start_time));

System.out.println("======================第二种文件复制方式——end_time:"

+ df.format(end_time));

System.out.println("======================第二种文件复制方式总耗时:"

+ (end_time.getTime() - start_time.getTime()) + "毫秒");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: