Java中io流的学习(二)FileInputStream和FileOutputStream

FileInputStream继承于InputStream,FileOutputStream继承于OutputStream,是用来对二进制文件进行操作的。InputStream和OutputStream是两个抽象类,是无法操作它的。相信很多初学的对这两个优点搞不懂,我们只需要记住,我们是不用操作InputStream和OutputStream的,我们操作的都是其的子类或者其子类的子类。

值得注意的地方是,使用完了流,记得要关闭,在文件末尾追加内容,要从基础流来考虑,当输出流文件不存在的时候,会自动创建文件,当输入流文件不存在时,会报错。所以,使用输入流时,要确定文件是否存在。

这两个常用的方法是:read(),从此输入流中读取一个数据字节;read(byte[] b),从此输入流中将最多b.length个字节的数据读入一个byte数组中;read(byte[] b,int off,int len),从此输入流中将最多len个字节的数据读入一个byte数组中;write(byte[] b),将b.length个字节从指定byte数组写入此文件输出流中;write(byte [] b,int off,int len),将指定byte数组中从偏移量off开始的len个字节写入此文件输出流;write(int b),将指定字节写入此文件输出流;close(),关闭流。

关于其的一些构造方法,看看API就懂了,或者待会看了我的代码实例再去结合API学习。

下面我们来用一些代码实例来讲解怎么使用:

①拷贝文件,一个一个字节的拷贝

@Test
public void t1() throws Exception{
	FileInputStream fis = new FileInputStream("H:\\javaio\\copy01.txt");
	FileOutputStream fos = new FileOutputStream("H:\\javaio\\copy02.txt");
	int n;
    //这里面是n等于读取到的字节数,当读取到末尾时,返回的是-1,所以这里用!=-1来表示没有读到文件末尾
	while((n = fis.read()) != -1){
		fos.write(n);
	}
	fos.close();
	fis.close();
}

②拷贝视屏:1024个字节1024个字节的拷贝

	@Test
	public void t2() throws IOException{
		FileInputStream fis = new FileInputStream("H:\\javaio\\测试.avi");
		FileOutputStream fos = new FileOutputStream("H:\\javaio\\测试copy.avi");
		byte[] n = new byte[1024];
		int len;
        //这里是1024个字节的读取,所以在read()里面放的是每次读取的字节数
		while((len = fis.read(n)) != -1){
			fos.write(n, 0, len);
		}
		fos.close();
		fis.close();
	}

③利用FileOutputStream将数据写入文件

	@Test
	public void t3() throws Exception{
		FileOutputStream fos = new FileOutputStream("H:\\javaio\\test1.txt");
		fos.write(98);//这里写入的是ASCII码
        //注意这里的getBytes(),这个是String类里面的方法,使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
		fos.write("sadsadsada".getBytes());
		fos.close();
	}

④实现对文件内容的追加,即不会覆盖掉原来的内容,在末尾继续添加

	@Test
	public void t4() throws Exception{
        //从基础流考虑追加,在以后遇到的一些追加中,都要从基础流来考虑,即都是在FileOutputStream这个基础流上来实现添加的
		FileOutputStream fos = new FileOutputStream("H:\\javaio\\qianfengwrite1.txt",true);
		fos.write(98);
		fos.write("sadsadsada".getBytes());
		fos.close();
	}

⑤对文件的读取

	@Test
	public void t5() throws Exception{
		FileInputStream fis = new FileInputStream("H:\\javaio\\qianfengwrite1.txt");
		int len;
		while((len = fis.read()) != -1){
			System.out.print((char)len);
		}
		fis.close();
	}

在这里我们扩展一个知识,我们知道在操作系统永久了之后,会产生垃圾,那这些垃圾是如何产生的呢?这些垃圾实际上就是在一些添加文件时使用了覆盖产生的。我们结合图来说明一下。

很多那种安全软件,比如360等清除垃圾文件,清除的,其实就是那些诸如内容2、内容3的那种垃圾文件。

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/81742175