java中文件的读写

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangzhiyuan123/article/details/87624407

在java中,输入串流的代表对象为java.io.InputStream实例,输出串流的代表对象为java.io.OutputStream的实例。无论数据源或目的地为何,只要设法取得InputStream或OutputStream的实例,接下来的操作输入/输出的方式都是一致的,无须理会来源或目的地的真正形式。

FileInputStream和FileOutputStream用来操作文件,分别继承自InputStream和OutputStream。

FileInputStream主要操作InputStream的read()抽象方法,从文档读取数据;FileOutputStream主要操作OutputStream的write()抽象方法,写出数据到文档。不使用时使用close()关闭文档流。

        static String src = "C:\\Users\\lenovo\\Desktop\\learn\\第一周总结.txt";
	static String dest = "C:\\Users\\lenovo\\Desktop\\week.txt";
	
	static void dump() throws IOException{
		InputStream in = new FileInputStream(src);
		OutputStream out = new FileOutputStream(dest);
		byte[] data = new byte[1024]; 
		int len;
		while((len = in.read(data)) != -1){
			out.write(data, 0, len);
		}
		in.close();
		out.close();
	}

使用串流装饰器装饰,这些类本身不改变InputStream,OutputStream的行为,只不过在InputStream取得数据后,再做一些加工处理,或者是要输出时做一些加工处理,再交由OutputStream真正进行输出。

这里使用BufferedInputStream和BufferedOutputStream装饰器,使数据读写更高效。

FileInputStream和FileOutputStream的实例,每次read()时都要求读取硬盘,每次write()时都要求写入硬盘,这会花费许多时间在硬盘定位上。InputStream的第一次read()尽量读取足够的数据至内存的缓存区,后续调用先看缓存区中是否有数据,如果有就直接从缓存区中读取,这样就减少从来源直接读取数据的次数。

        static void dump2() throws IOException{
		//自动关闭流,InputStream和OutputStream重载了AutoCloseable接口
		//BufferedInputStream和BufferedOutputStream作为流的修饰器,使读写更高效
		try(InputStream in = new BufferedInputStream(new FileInputStream(src));
				OutputStream out = new BufferedOutputStream(new FileOutputStream(dest))){
			byte[] data = new byte[1024];
			int len;
			while((len = in.read(data)) != -1){
				out.write(data, 0, len);
			}
		}
	}

猜你喜欢

转载自blog.csdn.net/jiangzhiyuan123/article/details/87624407
今日推荐