- 1.字节流:
一切文件数据在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。
流的关闭原则: 先开后关,后开先关。
- 1. 1字节输入流:
OutputStream类定义,此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到InpuStream类某个接收器要向文件钟输出,使用FileOutputStream类
- 1.2字节输入流:
定义:public abstract class InputStream extends Object implements Closeable
此抽象类是表示字节输入流的所有类的超类。
FileInputStream从文件系统钟某个文件中获取输入字节
package zjl;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/*
* 字节流:InputStream(输入流:读数据) OutputStream(输出流:写数据) 都是抽象类,不能实例化
* 子类:FileInputStream FileOutputStream
*/
public class test {
public static void main(String[] args) {
InputStream fis=null;//抽象类,不能实例化
OutputStream fos=null;//抽象类,不能实例化
try {
fis=new FileInputStream("d:\\a.txt");//调用子类
fos=new FileOutputStream("d:\\t.txt");
int bt=0;
//read把数据读入数组中,并返回读取的字节数,当不等于-1时,表示读取到数据,等于-1表示文件已经读完
while((bt=fis.read())!=-1) {
System.out.print((char)bt);//强制转化类型,要不然看不见内容
fos.write(bt);//输入到t.txt中,如果D盘没有a.txt和t.txt会报错
}
fis.close();//看完写完,要关闭
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package zijieliu;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class test {
/*
* 针对字节流字符流的读写速度慢:缓存区
* 包装类:缓存区包装类
* 1、字节流缓冲区包装类:BufferedInputSteam(读数据),BufferedOutputStream(写数据)
* 字符流缓冲区包装类:
*/
public static void main(String[] args) {
try {
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("d:\\a.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("d:\\q.txt"));
byte[] buffer = new byte[1024];
int len=0;
while((len=bis.read(buffer))!=-1) { //bis.read中read只是都长度
System.out.print(new String(buffer,0,len));
bos.write(buffer);
}
bos.flush();//刷新,一次写入数据//还可以防止出错
bis.close();
bos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 2.字符流:
字符流以字符为单位获取数据的流,称为字符流,它们都继承于Reader/Writer抽象类。常用的字符流有:
FileReader/FileWriter,文件字符流(节点流)
BufferedReader/BufferedWriter,字符缓存流(处理流)
InputStreamReader/OutputStreamWriter,转换流(处理流)
package zfl;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class test {
public static void main(String[] args) {
try {
FileReader fr=new FileReader("d:\\a.txt");
FileWriter fw=new FileWriter("d:\\t.txt");
char[] buff=new char[1024];
int len=0;
while((len=fr.read(buff))!=-1) {
System.out.print(new String(buff,0,len));//调用buff数值,转为字符串,从0位读到len
fw.write(buff);
}
fr.close();//关闭
fw.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package zifuliu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class test {
public static void main(String[] args) {
try {
BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\b.txt"));
char[] buff=new char[1024];
int len=0;
while((len=br.read(buff))!=-1) {
System.out.print(new String(buff,0,len));
bw.write(buff);
}
bw.flush();
br.close();
bw.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 3.字节流和字符流转换
package zjlzfl; /* *转换符:InputStreamReader OutputStreamWriter */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class test { public static void main(String[] args) { try { BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("d:\\a.txt"))); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\t.txt"))); bw.write("hello!"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }