主要分为字节流和字符流:
说明 | 字节流 | 字符流 |
抽象基类 | InputStream,OutputStream | Reader,Writer |
节点流 | FileInputStream,FileOutputStream | FileReader,FileWriter |
缓冲流 | BufferdInputStream,BufferdOutputStream | BufferdReader,BufferdWriter |
转换流 | InputStreamReader,OutputStreamWriter | |
* FileInputStream和BufferdInputStreamd包含同样的方法,FileOutputStream和BufferdOutputStream用法相同,只不过前者会清空文件内容写入,后者会在原来的文件内容后面追加
* BufferdReader提供了一个缓冲区,可以一次读一整行(readLine())
* inputStreamReader / outPutStreamReader 可以把字节流转换为字节流
字节流实现文件复制
/**
* 字节流,读写以byte为单位
* Created on 2018年9月5日<br>
*/
public class ByteTest {
public static void main(String[] args) throws IOException {
File file = new File("C:/Users/26725/Desktop/test.txt");
File file1 = new File("C:/Users/26725/Desktop/testout.txt");
if (!file.exists()) {
file.createNewFile();
}
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file1);
byte[] buffer = new byte[4];
int length;
while(-1!= (length=fis.read(buffer))){
String s = new String(buffer,0,length);
//每次读完都需要清空buffer
byte[] bytes = s.getBytes();
fos.write(bytes);
}
fis.close();
fos.close();
}
}
字符流实现文件复制
/**
* 字符流,读写以char为单位,速度更快
* Created on 2018年9月5日<br>
*/
public class CharTest {
public static void main(String[] args) throws IOException{
File file = new File("C:\\Users\\26725\\Desktop\\test.txt");
File file2 = new File("C:\\Users\\26725\\Desktop\\testout.txt");
//因为乱码,通过inputStreamReader和OutputStreamWriter转码
InputStreamReader isr = new InputStreamReader(new FileInputStream(file) ,"utf-8");
BufferedReader reader = new BufferedReader(isr);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file2),"utf-8"));
char[] chars = new char[2];
int length;
while (-1!=(length=reader.read(chars))) {
String s = new String(chars,0,length);
writer.write(s);
}
reader.close();
writer.close();
}
}