1. 字符流
- FileReader和FileWriter。
- 使用流对象要抛出IO异常
- 字符流:顾名思义,该流只能处理字符,但处理字符速度很快
- 处理16位字节单元
实例:替换括号中的字
package file;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
Reader red=null;
BufferedReader br=null;
Writer writ=null;
BufferedWriter bw=null;
try {
red=new FileReader("E:/zyw.txt");//FileReader
br=new BufferedReader(red);
writ=new FileWriter("E:/zyzyw.txt");
bw=new BufferedWriter(writ);
String str=null;
String sb=new String(br.toString());
StringBuffer sbf=new StringBuffer();
while ((str=br.readLine())!=null) {
String newstring=str.toString().replace("{who}","你哥哥").replace("{what}","杀").replace("{who2}","你爸");
bw.write(newstring);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(bw!=null){
bw.close();
}
if(writ!=null){
writ.close();
}
if(br!=null){
br.close();
}
if(red!=null){
red.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
2.字节流
- 字节流:可以处理所有以bit为单位储存的文件,也就是说可以处理所有的文件,但是在处理字符上的速度不如字符流,字节流存储的是8位字节单元
实例:复制图片
package file;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Demo5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream("E:/789.png");
fos=new FileOutputStream("C:/Users/巍巍爱天天/Desktop/789.png");
byte[] by=new byte[1024];
int len=0;
while((len=fis.read(by))!=-1){
fos.write(by,0,len);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(fis!=null){
fis.close();
}
if(fos!=null){
fos.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
实例2
从各种输入流到各种输出流
注:其实在各个不同的类型中,输入流到输出流的套路基本都一样。
那就拿最简单的FileOutputStream来举例子吧
从FileOutputStream到FileIntputStream其实就是复制一个文件的过程,将文件读取到FileIntputStream中,后输出到FileOutputStream也就是相当于输出到了硬盘的文件中。
我们可以以两个桶为例,一个桶为FileIntputStream,另一个桶为FileOutputStream,如果要把一个桶里的水转移到另一个桶中,我们首先需要一个水瓢,一次次的舀水才能完成我们的需求。
原文链接:https://blog.csdn.net/Yue_Chen/article/details/72772445
File file = new File("D:/123.txt");
FileInputStream fis = new FileInputStream(file);
//同样是叫做输入流的桶
StringBuffer sb = new StringBuffer();
//把输出流的桶换成了StringBuffer用来储存字符串
//其实也可以直接用String,但是StringBuffer速度更快。
byte[] buf = new byte[256];
//水瓢没变
int len = -1;
//测水瓢舀了多少水没变
while ((len = fis.read(buf)) != -1){
sb.append(new String(buf, 0, buf.length));
//和上面的原理基本一样,只不过换了个水瓢而已
//new String(buf, 0, buf.length)是将buf里面的内容转换为字符串
}
System.out.println(sb.toString());