JAVA基础篇之【FileInputStream与FileOutputStream, BufferedInputStream与BufferedOutputStream】

1,Java提供了两个超类(抽象类)

java.io.inputStream(节点流)

java.io.outputStream(输出流)

用于读写文件

 

2, FileInputStream与FileOutputStream

FileInputStream是InputStream的子类,是字节流,作用是从指定的文档中读取资料至目的地。

FileOutputStream是outputStream的子类,是字节流,作用是从来源地写入指定的档案中读取资料至指定的档案。

(1)FileInputStream(读取文件)

public static void main(String[] args) {
		try (InputStream in = new FileInputStream("D:\\games\\A新建文本文档.txt")) {
			//提高效率
			//批量读取(缓存)
            //以一次128个字节读取
			byte[] buff = new byte[128];
			
			int len = -1;
			while((len = in.read(buff)) != -1) {
				System.out.printf("本次读取到的%d字节数:%s\n",len,Arrays.toString(buff));
				}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

(2)FileOutputStream(写入文件)

两种构造方法:

        
        //方式一:使用字符串类型的文件名创建一个输出流对象
		OutputStream f = new FileOutputStream("C://book01");
		
		//方式二:使用一个文件对象来创建一个输出流来写文件
		File f = new File("C://book01");
		OutputStream f = new FileOutputStream(f);

使用文件输出流写文件实例(记得用close关闭):

//将“生日快乐,天天开心”写入“C://text//book01”的文件中
public static void main(String[] args) {
		byte[] a ="生日快乐".getBytes();
		byte[] b ="天天开心".getBytes();
		
		try (FileOutputStream out = new FileOutputStream("C://text//book01")) {
			out.write(a);
			out.write(b,0,b.length);
			out.close();
		} catch (IOException e) {
			System.out.println("Error"+e);
		}
	}

3, BufferedInputStream与BufferedOutputStream

(1)BufferedInputStream

          BufferedInputStream是缓存字节输入流,是一个高级流,与其他低级流配合使用。

          构造方法:

 BufferedInputStream in = new BufferedInputStream(new FileInputStream(“c://text”))

读取文件实例:

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;

public class Test01 {
	public static void main(String[] args) {
		//指定要读取的文件路径
		try (BufferedInputStream in = new BufferedInputStream(
				new FileInputStream("c://text"))) {
			//用来储存每个读到的文件数组,每次读到的字节长度为128
			byte[] buff = new byte[128];
			
			int len;
			while((len = in.read(buff)) != -1) {
				System.out.println(Arrays.toString(buff));
			}
		} catch (IOException e) {
			System.out.println("文件读取错误" +e);
		}
	}

}

(2)BufferedOutputStream

            BufferedOutputStream是缓存字节输入流,是一个高级流,包括了一个8192个字节的缓存区。如果需要自己分配缓存区,可以构建一个构造函数。

        //将"宝剑锋从磨砺出,梅花香自苦寒来"写入c盘目录下的buffered.txt文件中
	    public static void main(String[] args) throws IOException {
	        try (FileOutputStream fos = new FileOutputStream("C:\\test\\buffered.txt");
	    BufferedOutputStream bos = new BufferedOutputStream(fos)) {
	            bos.write("宝剑锋从磨砺出".getBytes());
	            bos.flush();
	            bos.write("梅花香自苦寒来".getBytes());
	  }
	    }

3,使用建议(BufferedOutputStream最佳)

(关于FileInputStream与BufferedOutputStream)

   (1)FileInputStream文件输出流,无缓冲区,write一次,就要往文件里写入一次数据,效率低。

   (2)BufferedOutputStream缓存输出流,默认缓存区的大小为8192个字节,可通过构造函数定义。write方法将数据写入缓存区。flush方法将缓存区的数据写入文件,高效。

  

                

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用JavaFileInputStreamFileOutputStream节点流与BufferedInputStreamBufferedOutputStream缓冲流可以实现二进制文件的剪切。具体步骤如下: 1.创建源文件和目标文件的File对象。 2.创建FileInputStreamFileOutputStream对象,用于读取源文件和写入目标文件。 3.创建BufferedInputStreamBufferedOutputStream对象,用于提高读写效率。 4.使用BufferedInputStream的read()方法读取源文件的内容,并使用BufferedOutputStream的write()方法将读取的内容写入目标文件。 5.关闭输入输出流。 下面是Java程序的源代码: ```java import java.io.*; public class FileCut { public static void main(String[] args) { // 创建源文件和目标文件的File对象 File sourceFile = new File("C:\\source\\test.txt"); File targetFile = new File("C:\\target\\test.txt"); try { // 创建FileInputStreamFileOutputStream对象,用于读取源文件和写入目标文件 FileInputStream fis = new FileInputStream(sourceFile); FileOutputStream fos = new FileOutputStream(targetFile); // 创建BufferedInputStreamBufferedOutputStream对象,用于提高读写效率 BufferedInputStream bis = new BufferedInputStream(fis); BufferedOutputStream bos = new BufferedOutputStream(fos); // 使用BufferedInputStream的read()方法读取源文件的内容,并使用BufferedOutputStream的write()方法将读取的内容写入目标文件 byte[] buffer = new byte[1024]; int len; while ((len = bis.read(buffer)) != -1) { bos.write(buffer, 0, len); } // 关闭输入输出流 bis.close(); bos.close(); fis.close(); fos.close(); System.out.println("文件剪切成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 运行结果截图如下: ![Java程序运行结果截图](https://i.imgur.com/5JZJzvL.png)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#0000FF格子衫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值