FileInputStream 和 FileOutputStream 的使用(字节)

该文章讲述了如何在Java中使用FileInputStream和FileOutputStream进行文件的读取和写出操作,包括创建流对象、复制文件过程以及异常处理。强调了字节流在处理文本和非文本文件中的应用,并提到了关闭流资源的重要性。
摘要由CSDN通过智能技术生成
  • 执行步骤
    • 1.创建读取或写出的File类的对象
    • 2.创建输入或输出流
      • FileInputStream
        • FileInputStream(File file): 创建一个新的FileInputStream,给定要读取的File对象。
        • FileInputStream(String fileName): 创建一个新的 FileInputStream,给定要读取的文件的名称。
      • FileOutStream
        • FileOutStream(File file): 创建一个新的FileOutStream,给定要读取的File对象。
        • FileOutStream(String fileName): 创建一个新的 FileOutStream ,给定要读取的文件的名称。
        • FileOutStream(File file,boolean append): 创建一个新的FileOutStream,指明是否在现有文件末尾追加内容。
    • 3.执行具体的读入或写出的过程
      • 读入:read(char [] c)
      • 写出:write(byte [] b,0,len)
    • 4.关闭流资源,避免内存泄漏
  • 代码如下:
            File f1=new File("D:\\io\\io2\\周杰伦 - 稻香.flac");
    		File f2=new File("D:\\io\\io1\\周杰伦 - 稻香_copy.flac");//文件名后要加\\周杰伦 -                 稻香_copy.flac否则找不到指定文件
    		FileInputStream i=null;
    		FileOutputStream o=null;
    		try {
    			i=new FileInputStream(f1);
    			o=new FileOutputStream(f2);
    			byte [] b=new byte [1024];
    			int len;
    			while((len=i.read(b))!=-1) {
    				o.write(b, 0, len);
    			}
    			System.out.println("复制成功");
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally {
    			try {
    				if(i!=null) {
    					i.close();
    				}
    				if(o!=null) {
    					o.close();
    				}
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}

  • 注意点:
    • 1.因为涉及到流资源的关闭操作,所以出现异常的话,需要使用try-catch-finally的方式来处理异常
    • 2.对于输入流来讲,要求File类的对象对应的物理磁盘上的文件必须存在。否则,会报FileNotFoundException异常。对于输出流来讲,File类的对象对应的物理磁盘上的文件可以不存在。
      • 如果此文件不存在,则在输出的过程中,会自动创建此文件,并写出数据到此文件中。
      • 如果此文件存在,使用
        • FileOutStream(File file)或 FileOutStream(File file,false):输出数据过程中,会新建同名的文件对现有的文件进行覆盖。
        • FileOutStream(File file,true):输出数据过程中,会在现有的文件的末尾追加写出内容。
    • 3.对于字符流,只能用来操作文本文件,不能用来处理非文本文件的。对于字节流,通常是用来处理非文本文件的。但是,如果涉及到文本文件的复制操作,也可以使用字节流。
      • 说明:文本文件:.txt、.java、.C、.cpp、.py等。文本文件:.doc、.xls、.jpg、.pdf、.mp3、.mp4、.avi 等
  • 常用方法说明:
    • 字节输入流:InputStream
      • public int read(): 从输入流读取一个字节。返回读取的字节值。虽然读取了一个字节,但是会自动提升为int类型。如果已经到达流末尾,没有数据可读,则返回-1。
      • public int read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。每次最多读取b.length个字节。返回实际读取的字节个数。如果已经到达流末尾,没有数据可读,则返回-1。
      • public int read(byte[] b,int off,int len):从输入流中读取一些字节数,并将它们存储到字节数组 b中,从b[off]开始存储,每次最多读取len个字节 。返回实际读取的字节个数。如果已经到达流末尾,没有数据可读,则返回-1。
    • 字节输出流:OutputStream
      • public void write(int b):将指定的字节输出流。虽然参数为int类型四个字节,但是只会保留一个字节的信息写出。
      • public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。
      • public void write(byte[] b, int off, int len):从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
      • public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
      • public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
      • 说明:close()方法,当完成流的操作时,必须调用此方法,释放系统资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值