Java学习(111)Java输入输出流——字节输出流FileOutputStream

FileOutputStream概述

FileOutputStream作用

将数据写入文件中。

FileOutputStream的构造方法



注:这里的FileOutputStream(File file, boolean append)方法中的append如果为true,那么就表示从文件的末尾加入数据。

FileOutputStream的常用方法简介

方法名描述
public void write(int b)将指定字节写入此文件输出流
public void write(byte[] b)将b.length个字节从指定byte数组写入此文件输出流中
public void write(byte[] b, int off, int len)将指定byte数组中从偏移量off开始的len个字节写入此文件输出流
public void close()关闭此文件输出流并释放与此流有关的所有系统资源

案例

FileOutputStream(File file)、write(int b)、write(byte[] b)

package com.study.myfile;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo {
	public static void main(String[] args) {
		FileOutputStream fos;
		FileInputStream fis;
		try {
			fos = new FileOutputStream("study.txt");
			fis = new FileInputStream("study.txt");
			fos.write(50);
			fos.write('a');
			System.out.println(fis.read());
			System.out.println((char)fis.read());
			fos.close();
			fis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果:

50
a

此时study.txt文件中的内容为:

2a

注:这里由于编码的原因,可能导致存进去的数据并不是我们想要的,例如这里存的是50,但是文件里存的是2。通过read()方法可以看出,存的是50。

FileOutputStream(File file, boolean append)

		try {
			fos = new FileOutputStream("study.txt",true);
			fis = new FileInputStream("study.txt");
			fos.write(50);
			fos.write('a');
			System.out.println(fis.read());
			System.out.println((char)fis.read());
			fos.close();
			fis.close();
		}

运行结果:

50
a

此时study.txt文件中的内容为:

2a2a

这说明方法中的append如果为true,那么就表示从文件的末尾加入数据。

从以上案例可以看出,字节流不适合做字符相关内容的,存储时会发生意想不到的结果。

读取和写入图片文件

前置条件

D:\学习\eclipse_studyspace\IOProj下存储两个文件:happy.jpg和happy.gif。

对图片的复制粘贴

package com.study.myfile;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputDemo1 {
	public static void main(String[] args) {
		// 文件拷贝
		try {
			FileInputStream fis=new FileInputStream("happy.gif");
			FileOutputStream fos=new FileOutputStream("happycopy.gif");
			int n=0; //存储读方法的返回值,n=-1表示读到文件末尾了
			byte[] b=new byte[1024];
			while((n=fis.read(b))!=-1){
				fos.write(b);
			}
			fis.close();
			fos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
}

注:
(1) 这里可以将gif换成jpg,以达到拷贝不同类型图片的目的。
(2) 这里发现,happy.jpg大小为25K,而拷贝后的happycopy.jpg大小为26K,happy.gif大小为246K,而拷贝后的happycopy.gif大小为247K,这是因为如果最后一次读数据时不够1024个字节,这时再把数据写入新文件,那么新文件大小肯定要比之前的文件大,因为最后一次数据写多了。

public void write(byte[] b, int off, int len)

如果将 fos.write(b);改为fos.write(b,0,n);,那么两个文件的大小就是一致的。这是因为public void write(byte[] b, int off, int len)是将指定byte数组中从偏移量off开始的len个字节写入此文件输出流,这里n就是1024,因此文件大小相等。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值