一、BufferedInputStream与BufferedOutputStream
package com.foresealife.lams.common;
import java.io.*;
public class Test {
public static void main(String[] args){
try {
InputStream in = new BufferedInputStream(new FileInputStream(new File("C:\\Users\\\\Desktop\\测试.txt")));
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("C:\\Users\\\\Desktop\\测试11111.txt"), true)); // 添加“true”可以在文件后面续写,不写则默认为false覆盖原有的内容
byte[] bytes = new byte[1024];
long time1=System.currentTimeMillis();
int len;
String newLine = System.getProperty("line.separator");
while ((len = in.read(bytes)) != -1){
//Unix下的换行符为"\n"
out.write("\n".getBytes());
//Windows下的换行符为"\r\n"
out.write("\r\n".getBytes());
//推荐使用,具有良好的跨平台性
String newLine = System.getProperty("line.separator");
out.write(newLine.getBytes());
out.write(bytes, 0, bytes.length);
}
// out.flush();
out.close();
long time2=System.currentTimeMillis();
System.out.println("缓冲区复制用时:"+(time2-time1)+"毫秒");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、bufferedReader 与bufferedWriter
public class Test {
public static void main(String[] args){
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\000\\Desktop\\测试.txt"), "gbk")); // "gbk"解决中文乱码问题
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("C:\\Users\\000\\Desktop\\测试11111.txt"), true);// 添加“true”可以在文件后面续写,不写则默认为false覆盖原有的内容
String str;
while ((str=bufferedReader.readLine())!=null){ 读取一行
System.out.println(str);
bufferedWriter.write(str);
bufferedWriter.newLine(); // 换行
}
bufferedReader.close();
bufferedWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
readeLine()方法会逐个读取字符,当读到回车‘\r’或’\n’会将读到的字符作为一行的内容返回。
三、LineNumberReader 这是jdk提供可以跟踪行号的输入流, 是BufferedReader的直接自子类, 在读到换行符’\n’或回车符’\r’或回车符后紧跟换行符,会将行号自动加1。
public static void main(String[] args){
try {
LineNumberReader lineNumberReader = new LineNumberReader(new InputStreamReader(new FileInputStream("C:\\Users\\22\\Desktop\\测试.txt"), "gbk"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("C:\\Users\\22\\Desktop\\测试11111.txt"));
lineNumberReader.setLineNumber(0);
String str;
while ((str=lineNumberReader.readLine())!= null){
bufferedWriter.write(lineNumberReader.getLineNumber()+":"+str);
bufferedWriter.newLine();
}
lineNumberReader.close();
bufferedWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
效果:
输入文件:
输出文件:
四、inputStreamReader 和OutputStreamWriter 为转换流, 可以见将字节流转换为字符流,包装类,只能针对文本文件字节流进行转换, 如果字节流是一张图片,此时转换为字符流会造成数据损失。
public static void main(String[] args){
try {
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("C:\\Users\\22\\Desktop\\测试.txt"), "gbk");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("C:\\Users\\22\\Desktop\\测试11111.txt"));
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
String str;
while ((str=bufferedReader.readLine())!= null){
bufferedWriter.write(str);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}