【Java高级特性】I/O流——使用字节流读写文件

1.字节流FileInputStream读文本文件

FileInputStream称为文件输入流,它是字节输入流InputStream抽象类的一个子类,它的作用是将文件中的数据输入到内部存储器(简称内存)中,可以利用它来读取文本文件中的数据,具体实现步骤如下:

1)导入相关的类

import java.io.IOException;

import java.io.InputStream;

import java.io.FileInputStream;

2)构造一个文件输入流对象

InputStream fileObject = new FileInputStream("text.txt");//此时的文件输入流对象fileObject就和源数据源(text.txt)关联起来。

3)利用文件输入流类的方法读取文本文件中的数据

fileObject.available();//可读取的字节

fileObject.read();//读取文件的数据

4)关闭文件输入流对象

fileObject.close();

代码举例说明

public static void main(String[] args) {
		// 创建一个File对象,指向某个文件
		File file = new File("E:/a.txt");//我这里的a.txt的内容是aqwerdfg
		// 创建FileInputStream类对象,读取指定文件内的数据
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(file);
			StringBuffer sb = new StringBuffer();
            //将文件内容全部读取
			while (true) {
				int num = fis.read();//读取fis对象指定的a.txt文件内的数据
				if (num == -1) {
					break;
				}
				sb.append((char) num);
			}
			System.out.print(sb);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			//不管前面有没有读取到数据,流最终是要关闭
			try {
				if(fis!=null){
					fis.close();//关闭流
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

2.字节流FileOutputStream写文本文件

FileOutputStream称为文件输出流,它是字节输出流OutputStream抽象类的子类,它的作用是把内存中的数据输出到文件中,可以利用它把内存中的数据写入到文本文件中,具体实现步骤如下:

1)导入相关的类

import java.io.IOException;

import java.io.OutputStream;

import java.io.FileOutputStream;

2)构造一个文件输出流对象

OutputStream fos = new FileOutnputStream("text.txt");//此时的文件输出流对象fos就和目标数据源(text.txt)关联起来。此构造方法会将写入的数据覆盖掉目标数据源(text.txt)内原来的数据

OutputStream fos = new FileOutnputStream("text.txt",true);/此构造方法会将数据添加到文件的末尾位置,不会覆盖目标数据源(text.txt)中原来已经存在的数据

3)利用文件输出流类的方法把数据写入到文本文件中。

String str = "好好学习Java";

byte[] words = str.getBytes();

fos.write(words,0,words.length);//利用write方法将数据写入到文件中去

4)关闭文件输入流对象

fos.close();

代码举例说明

public class FileOutputStreamDemo01 {

	public static void main(String[] args) throws IOException {
		//创建FileOutputStream类对象
		//此构造方法会将写入的数据覆盖掉指定路径文件内原来的数据
		FileOutputStream fos=new FileOutputStream("E:/a.txt");
		fos.write(97);//将97对应的ASCII码值写入到fos对象指向的路径的文件内
		//此构造方法会将数据添加到文件的末尾位置,不会覆盖文件中原来已经存在的数据
		FileOutputStream fos1=new FileOutputStream("E:/b.txt", true);
		fos1.write(98);
		fos.close();
		fos1.close();
	}

写入多个数据举例说明

public static void main(String[] args) throws IOException {
		// 创建File FileOutputStream类对象
		FileOutputStream fos=new FileOutputStream("E:/b.txt",true);//fos对象指向E:/b.txt,并且数据写入到b.txt文件内数据的末尾
		String str="asdfghj";
		byte[] bytes=str.getBytes();//将写入的数据转换成字节数组
		fos.write(bytes);//写入数据到E:/b.txt内
		System.out.println("数据写入完毕");
		fos.close();
	}

3.FileInputStream和FileOutStream读写文件

使用FileInputStream读文件的同时使用OutputStream写文件,完成复制操作。

//读取文件的同时写入文件,即将指定路径文件复制到指定路径
	public static void main(String[] args) {
		// 创建FileInputStream类对象
		FileInputStream fis=null;
		FileOutputStream fos=null;
		try {
			 fis=new FileInputStream("E:/b.txt");
			 fos=new FileOutputStream("D:/copy.txt");
			//读取数据,写入数据
			int num;
			while((num=fis.read())!=-1){//当num=-1时,说明读取到文件内数据的末尾了
				fos.write(num);
			}
			System.out.println("文件复制完毕");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{最终要关闭流,先开的流后关,后开的流先关
			try {
				fos.close();
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值