文件输入输出流 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);
本文地址:https://blog.csdn.net/weixin_45829957/article/details/107592306