IO流小结以及文件复制的方法
- 一、流的概述
流根据方向可以分为:输入流和输出流。注意:输入和输出是相对于内存而言的。从内存出来的就是输出,到内存中的就是输入。输入流又叫做InputStream,输出流有叫做OutputStream。输入还叫做“读 Read”,输出还叫做“写 Write” - 二、流的读取方式
流根据读取数据的方式可以分为:字节流和字符流,字节流是按照字节的方式读取,字符流是按照字符的方式读取,一次读取2个字节。Java语言中一个字符占2个字节。字节流适合读取:视频、声音、图片等二进制文件;字符流适合读取:纯文本文件。 Java语言中所有的字节流都以Stream结尾。所有的字符流都含有Reader或Writer; - 三、常用流及其方法
1.FileInputStream
//java.io.FileInputStream
//1. 要读取某文件,先与这个文件创建一个“输入流”
//文件路径
String FilePath = "D:\\java\\test01.txt";
FileInputStream fis =new FileInputStream(FilePath);
//开始读,返回一个int类型的数据
int i = fis.read();
//当返回的值为-1时,表示已经读取到文件的末尾
//int read (byte [] bytes);
// 读取之前在内存中准备一个byte数组,每次读取多个字节存储到byte数组中
//一次读取多个字节,不是单字节读取了 效率高
//准备一个byte数组
byte [] bytes =new byte [1024]; //每次读取1kb
int i1 =fis.read(bytes); // 该方法返回int类型的值代表的的是,这次读取了多少个字节
//循环读取
int temp =0 ;
while((temp=fis.read(bytes))!=-1){
System.out.println(new String (byte,0,temp));
//fis.available(); 返回流中剩余的估计字节数
//fis.skip(2); 跳过俩个字节
//关闭
fis.close();
}
2.FileOutputStream
import java.io.FileOutputStream;
//文件字节输出流, 将计算机内存中的数据写入硬盘中的文件中
//1. 创建文件字节输出流
FileOutoutStream fos =new FileOutoutStream("D:\\java\\test02.txt"); //该文件不存在则自动创建
//以追加的方式写入
FileOutoutStream fos =new FileOutoutStream("D:\\java\\test02.txt",true);
//2. 开始写
String str ="HelloWord!";
byte[] bytes =str.getBytes();
//3.将byte数组中的所有数据全部写入
fos.write(bytes);
//4. 将byte数组中的一部分写入
fos.write(bytes,0,2);
fos.close();
3.DateOutoutStream
import java.io.DateOutputStream;
/*
DateOutputStream 数据字节输出流
可以将内存中的“int i=10”写入到硬盘文件中
写进去的不是字符串,写进去的是二进制数据,带类型
*/
//创建数据字节输出流
DataOutputStream dos =new DataOutputStream(new FileOutputStream("D:\\java\\test03.txt"));
//准备数据
byte b =10;
short s =11;
int i=13;
long l =1110L;
double d=23.1;
float f =123f;
boolean flag =false ;
char c ='a';
//写
dos.writeByte(b);
dos.writeShort(s);
dos.writeInt(i);
dos.writeLong(l);
dos.writeDouble(d);
dos.writeFloat(f);
dos.writeBoolean(flag);
dos.writeChar(c);
//刷新
dos.flush();
//关闭
dos.close();
4.DateInputStream
import java.io.DateInputStream ;
//创建输入流
DataInputStream dis =new DataInputStream(new FileInputStream("D:\\java\\test03.txt"));
//读
//注意:要使用该留读取数据,必须提前知道该文件中数据的存储格式,顺序
//读的顺序必须和写入的顺序相同
byte b =dis.readByte();
short s = dis.readShort();
int i =dis.readInt();
long l =dis.readLong();
double d =dis.readDouble();
float f =dis.readFloat();
boolean flag =dis.readBoolean();
char c = dis.readChar();
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(l);
System.out.println(d);
System.out.println(f);
System.out.println(flag);
System.out.println(c);
//关闭
dis.close();
四、关于文件复制的三种方法
public static void main(String[] args) throws Exception {
//创建输入流
FileInputStream fis =new FileInputStream("D:\\java\\课程\\test.txt");
//创建输入流
FileOutputStream fos =new FileOutputStream("D:\\java\\课程\\test02.txt");
//一边读一边写
byte [] bytes =new byte[1024]; //1kb
int temp =0;
while((temp=fis.read(bytes))!=0) {
//将byte数组中内容直接写入
fos.write(bytes,0,temp);
}
//刷新
fos.flush();
//关闭
fis.close();
fos.close();
}
以下代码只能复制纯文本文件
public static void main(String[] args) throws Exception{
FileReader fr =new FileReader ("D:\\java\\课程\\test03.txt");
FileWriter fw =new FileWriter ("D:\\java\\课程\\test04.txt");
char [] chars =new char [512];
int temp=0;
while((temp =fr.read(chars))!=-1) {
//写
fw.write(chars,0,temp);
}
fw.flush();
fr.close();
fw.close();
}
public static void main(String[] args) throws Exception{
BufferedReader br =new BufferedReader(new FileReader("D:\\java\\课程\\test01.txt"));
BufferedWriter bw =new BufferedWriter(new FileWriter("D:\\java\\课程\\test05.txt"));
String temp =null;
while ((temp=br.readLine())!=null) {
bw.write(temp);
bw.newLine();
}
bw.flush();
br.close();
bw.close();
}