java的io流以及文件复制的实现

一.java的io流

java为了实现一个好的输入输出系统提供了大量的类,这些类都被封装到了java的io包中,我们可以通过import java.io.*进行引入.

在讲java的io流之前必须要明白java的File类,该类叫文件类,该类的可以理解为将一个实体文件封装成为了一个文件对象,从而可以通过调用相关的属性和方法对文件进行操作.将一个文件封装为一个File对象的代码如下:

import java.io.File;

//根据路径进行封装
File file = new File("d:\\machi.txt");

接下来我们具体讲一下java的io流,java在实现io操作时封装了大量的类,这些类可以从操作对象上可以分为两类:一类是对字节进行操作的Inputstream和OutputStream,另一类是对字节进行操作的Reader和Writer类.其中Inputstream和Reader是输入流,对文件进行读取操作,也就是把文件内容读进内存,而Outputstream和Writer是输出流,对文件进行写操作,也就是把内存中的内容写到文件中.

只知道这些大家还是有很多疑惑,因为在我们看到的io流例子中,往往创建出来的对象不是上面四种类的对象,而是在上面四个类的基础上进行进一步的装饰,例如下面的代码:

import java.io.*;

File file = new File("d:\\machi.txt");
BufferedReader br = new BufferedReader(new FileReader(file));

让我们分析一下上面的代码,我们首先创建一个File对象,该对象是对D盘下machi.txt文件的封装,然后我们把一个指向file对象的FileReader对象赋给一个BufferedReader类来初始化一个BufferedReader对象.

看上去好复杂,那这个BufferedReader对象又是什么呢,其实在io流中有几个特殊的类,他们分别是FilterInputStream,FilterOutputStream,FilterReader和FilterWriter,从名字可以看出来,他们与上面输入输出的四个类一一对应,那这四个类有什么用呢?其实对于他们四个,其实是四个装饰器,这用到了设计模式中装饰器的概念,装饰器主要的目的是在原有类的基础上增加新的功能,而这四个类的目的也是如此,他们有很多子类,比如我们上面看到的BufferReader,它可以防止每次读取时都得进行实际写操作,代表使用缓冲区,这可以大大加快读写的效率,当然,你在实际应用可以不使用这些装饰器类,但那样的效率就会很低.

 

二.文件的复制

了解完io流的基本内容后,我们写一个文件复制的小程序来练一下手.具体代码如下:

package io;

import java.io.*;

public class FileCopy{
	
    //注意:在使用io流时一定要注意异常的处理
	public static void main(String[]args) throws IOException{
		
		File file = new File("e:\\machi.txt");
		
		File fileCopy = new File("d:\\machi-copy.txt");
		
		BufferedReader br = new BufferedReader(new FileReader(file));
		
		BufferedWriter bw = new BufferedWriter(new FileWriter(fileCopy));
		
		if(!(fileCopy.exists())){
			
			fileCopy.createNewFile();
			
		}
		
		String s;
		
		while((s = br.readLine()) != null){
			
			bw.write(s + "\r\n");
			
		
			
		}

        //最后一定要使用close方法关闭输入和输出流
		br.close();
		
		bw.close();
		
	}
}






由于readLine是读取一行,但在最后并不会加入换行符,所以要手动添加换行的转义字符,一开始添加的是\n,但是添加完后并没有换行的效果,这就让人很头秃了,不过,没有什么能打败未来的程序员,经过我的不懈努力,最后查到在windows系统的文件中\r\n(回车符加换行符)才代表换行,感觉有点反人类,如果大家想了解不同系统文件中换行的字符,可以通过下面链接中的博文进行了解.

https://blog.csdn.net/u010852680/article/details/77722531

哈,终于写完了,今天又是元气满满的一天!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值