• 执行步骤
  • 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()方法,当完成流的操作时,必须调用此方法,释放系统资源。