缓冲流
BufferedWriter
BufferedReder
BufferedWriter
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
写入数据:
package io3;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author Angus
* BufferedWriter
* BufferedReder
*
* 构造:
* BufferedWriter(Writer out)
*/
public class BufferWriterDemo {
public static void main(String[] args) throws IOException{
//创建缓冲流对象
FileWriter fw = new FileWriter("a.txt");
BufferedWriter bw = new BufferedWriter(fw);
//简化
BufferedWriter bw2 = new BufferedWriter(new FileWriter("b.txt"));
//写入数据
bw.write("hello");
bw.flush();
// fw.close();//这个不需要
bw.close();
}
}
读取数据;
package io3;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
*
* @author Angus
* 字符缓冲流读取数据
*/
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
//创建字字符流对象
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//读取数据
// int ch = 0;
// while((ch = br.read()) != -1){
// System.out.print((char)ch);
// }
char[] chs = new char[1024];
int len = 0;
while((len = br.read(chs)) != -1){
System.out.println(new String(chs,0,len));
}
}
}
创建工具类实现复制文件和图片:
package io3;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
*
* @author Angus
* 工具类
* 复制文本文件,图片等。。。
*/
public class Copys {
private Copys(){
}
/**
* 复制文本文件
* @param src
* 数据源
* @param dest
* 目的地
*/
public static void copyFile (String src, String dest) throws IOException{
BufferedReader br = new BufferedReader(new FileReader(src));
BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
char[] chs = new char[1024];
int len = 0;
while((len = br.read(chs)) != -1){
bw.write(chs, 0, len);
bw.flush();
}
bw.close();
br.close();
}
/**
* 复制二进制文件
* @param src
* 数据源
* @param dest
* 目的地
* @throws IOException
*/
public static void copyBinaryData(String src, String dest) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));
byte[] chs = new byte[1024];
int len = 0;
while((len = bis.read(chs)) != -1){
bos.write(chs, 0, len);
}
bos.close();
bis.close();
}
}
测试;
package io3;
import java.io.IOException;
/**
* @author Angus
*
*/
public class CopysTest {
public static void main(String[] args) throws IOException {
//需求:复制文本
Copys.copyFile("a.txt", "b.txt");
Copys.copyBinaryData("111.jpg", "222.jpg");
}
}
通过复制MP3文件测试缓冲流是否高效
package io3;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 通过复制MP3文件测试缓冲流是否高效
* @author Angus
*
* 基本字节流一次读写一个字节
* 基本字节流一次读写一个字节数组
* 高效字节流一次读写一个字节
* 高效字节流一次读写一个字节数组
*
* 测试发现 高效字节流一次读写一个字节数组最快。。。。。
*/
public class CopyMp3 {
public static void main(String[] args) throws IOException {
long star =System.currentTimeMillis();
// method1(); //基本字节流一次读写一个字节
// method2(); // 高效字节流一次读写一个字节
// method3(); //基本字节流一次读写一个字节数组
method4(); //高效字节流一次读写一个字节数组
long end =System.currentTimeMillis();
System.out.println("共耗时"+(end-star)+"毫秒");
}
private static void method1() throws IOException{
FileInputStream fis = new FileInputStream("陈奕迅稳稳的幸福.mp3");
FileOutputStream fos = new FileOutputStream("稳稳的幸福.mp3");
int by = 0;
while((by = fis.read()) != -1){
fos.write(by);
}
fos.close();
fis.close();
//共耗时-11527毫秒
}
private static void method2() throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("陈奕迅稳稳的幸福.mp3"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("aa.mp3"));
int by = 0;
while((by = bis.read()) != -1){
bos.write(by);
}
bos.close();
bis.close();
//共耗时122毫秒
}
private static void method3() throws IOException{
FileInputStream fis = new FileInputStream("陈奕迅稳稳的幸福.mp3");
FileOutputStream fos = new FileOutputStream("bbbb.mp3");
byte[] bys = new byte[1024];
int len = 0;
while((len = fis.read(bys)) != -1){
fos.write(bys, 0, len);
}
fos.close();
fis.close();
//共耗时78毫秒
}
private static void method4() throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("陈奕迅稳稳的幸福.mp3"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("cccc.mp3"));
byte[] bys = new byte[1024];
int len = 0;
while((len = bis.read(bys)) != -1){
bos.write(bys, 0, len);
}
bos.close();
bis.close();
//共耗时68毫秒
}
}
字符缓冲流的特殊功能
package io3;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author Angus
* BufferedWriter
* newLine() 写入一个行分隔符。
* 写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 ('\n') 符。
* BufferedReader
* readLine() 读取一个文本行。
* 读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
*/
public class BufferedStringDemo {
public static void main(String[] args) throws IOException{
//写数据
BufferedWriter bw = new BufferedWriter(new FileWriter("at.txt"));
for (int i = 0; i < 5; i++) {
bw.write("hello"+i);
// bw.write("\r\n");
//改进:
bw.newLine();
bw.flush();
}
bw.close();
//读取数据
BufferedReader br = new BufferedReader(new FileReader("at.txt"));
String line = null;
while((line = br.readLine()) != null){
System.out.println(line);
}
}
}
如何改名和复制目录:
先改名后复制
先复制后改名
改名代码demo;
package io3;
import java.io.File;
/**
* @author Angus
* 如何对文件改名
*
*/
public class ChangeNamedemo {
public static void main(String[] args) {
File file = new File("a.txt");
File file2 = new File("cc.txt");
//public boolean renameTo(File dest)
System.out.println(file.renameTo(file2)); //true
}
}
ok ,下面开始正式操作
package io3;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import org.omg.PortableInterceptor.ObjectIdHelper;
/**
* @author Angus
* 编写一个程序吧一个目录下的.java 文件复制到别的目录,并修改扩展名.jad
*
* A; 封装目录
* B:获取满足的File[]数组
* C:遍历数组得到每一个File类
* D:复制文件
* 复制后改名
* 复制前改名
*/
public class CopyFolder {
public static void main(String[] args) throws IOException{
File file = new File("d:\\aaa");
File[] listFiles = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile() && name.endsWith(".java");
}
});
//判断目录是否存在 不存在创建
File destFile = new File("d:\\aa");
if(!destFile.exists()){
destFile.mkdir();
}
//遍历
for (File file2 : listFiles) {
String name = file2.getName();
String newName = name.replaceAll(".java", ".jad");
File newFile = new File(destFile,newName);
//复制
BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
String line =null;
while((line = br.readLine()) != null){
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
}
}
先复制后改名类似。。。。。
最后附上JDK使用文档API 下载