文件输入输出流 OutputStrea字节输出流,InputStream字节输入流,Writer字符输出流,Reader字符输入流,转换流,拷贝原始实现详解

 

File类不能实现输入和输出

Java.io包

 OutputStrea字节输出流

Closeable(输出流关闭):


Public interface Closeable extends Autocloseable{
	Void close() throws IoException;
}

Flushable(刷新):

Public interface Flushable{

       Public void flash() throws IoException;

}

OutputStrea输出方法

3常用

因为最终都需要发生向上转移的处理关系,所以对于此时的FileOutputString子类核心在构造方法上

【覆盖】构造方法:public FileOutputStream(File file)throws FlieNotFoundException

【追加】构造方法:public FileOutputStream(File file,Boolean append)throws FileNotFoundException 

范例:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class outPut {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		File file=new File("D:/Stream/hello/test1.txt");//指定操作路径
		if(!file.getParentFile().exists()) {//文件不存在
			file.getParentFile().mkdirs();//创建父目录
		}
		OutputStream output=new FileOutputStream(file);//实例化
		String str="chesheosak";//输出内容
		output.write(str.getBytes());//将字符串变字节
		output.close();//关闭资源
	}

}

InputStream字节输入流

 

01

02

InputStream核心方法:

InputStream类属于抽象类,用子类来实例化对象,读取文件用FileInputStream子类

构造方法:

范例:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class INput {
	public static void main(String[] args) throws Exception {
		File file=new File("D:/Stream/hello/test1.txt");
		InputStream input=new FileInputStream(file);
		byte data[]=new byte[1024];//开辟一个缓冲区读取数据
		int len=input.read(data);//读取数据,数据全部保存在字节数组中,返回读取个数
		System.out.println(len);
		System.out.println(new String(data,0,len));
		input.close();
	}


}

以字节数组进行接收

不能读超过10k的文件·

Writer字符输出流

可追加输出内容

    }

Reader字符输入流

 

}

字节流与字符流区别:

在使用OutputStream类输出的时候如果没有使用close()方法关闭输出流,内容依然可以正常输出;

在使用Writer类输出的时候如果没有使用close()方法关闭输出流,内容无法正常输出,应为其使用了缓冲区,当使用close会强制刷新缓冲区,在不关闭的情况下可以使用flush()强制性刷新;

字节流处理是不会使用缓冲区,而字符流会使用到缓冲区,使用字符流缓冲区利于中文处理

转换流:

实现字符流与字节流转换

OutputStreamWriter:

定义:public class OutputStreamWriter extends Writer

构造方法:public OutputStreamWriter(OutputStream out)

InputStreamReader:

定义:public class InputStreamReader extends Reader

方法:public InputStreamReader (InputStream out)

综合案例:

文件拷贝处理:
Copy命令实现拷贝处理
 
拷贝原始实现:
 



import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

class FileUtil{
	private File srcfile;//源文件路径
	private File derfile;//目标文件路径
	public FileUtil(String src, String der) {
		this(new File(src),new File(der));
	}
	public FileUtil(File srcfile, File derfile) {
		// TODO Auto-generated constructor stub
		this.derfile=derfile;
		this.srcfile=srcfile;
	}
	public boolean copy() throws Exception {
		if(!srcfile.getParentFile().exists()) {
			System.out.println("源文件不存在");
			return false;
		}
		if(!derfile.getParentFile().exists()) {
			derfile.getParentFile().mkdirs();
		}
		byte data[]=new byte[1024];//开辟拷贝缓冲区
		InputStream input=null;
		OutputStream output=null;
		input=new FileInputStream(srcfile);
		output=new FileOutputStream(derfile);
		int len=0;
		while((len=input.read(data))!=-1) {
			output.write(data,0,len);
		}
		if(input!=null) {
			input.close();
		}
		if(output!=null) {
			output.close();
		}
		return true;
	}
}
public class copy {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		long start=System.currentTimeMillis();
		FileUtil fu=new FileUtil("D:/教学舆情报.doc", "D:/测试.doc");
		System.out.println(fu.copy()?"文件拷贝成功":"文件拷贝失败");
		long end=System.currentTimeMillis();
		System.out.println("拷贝完成时间:"+new SimpleDateFormat().format(end-start));
	}

使用转存方式处理(JDK 1.9以后):

 

input.transferTo(output);

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只猪的思考

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

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

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

打赏作者

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

抵扣说明:

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

余额充值