对流的理解
package io;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class MyIO {
public static void main(String[] args) throws Exception {
// writer001();
// writer002();
// reader001();
//reader002();
// copy001();
copy002();
}
private static void writer002() throws Exception {
//传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写
FileWriter fw = new FileWriter("1.txt",true);
fw.write("续写传奇吗?");
fw.close();
}
private static void copy002() throws Exception {
FileReader reader = new FileReader("1.txt");
FileWriter writer = new FileWriter("22.txt");
char[] arr = new char[1433];
int res = 0 ;
while ((res = reader.read(arr)) != -1) {
writer.write(arr);
}
reader.close();
writer.close();
}
private static void copy001() throws Exception {
FileReader reader = new FileReader("1.txt");
FileWriter writer = new FileWriter("11.txt");
int res = 0 ;
while ((res = reader.read()) != -1) {
writer.write(res);
}
reader.close();
writer.close();
}
private static void reader002() throws Exception {
FileReader fileReader = new FileReader("src\\main\\java\\bio\\BIOServer.java");
// bio.BIOServer
int res = 0;
char[] arr = new char[1234];
while ((res = fileReader.read(arr)) != -1) {
System.out.print(new String(arr,0,res));
}
fileReader.close();
}
private static void reader001() throws Exception {
FileReader fileReader = new FileReader("reader.txt");
int res =0;
while ((res = fileReader.read()) != -1) {
System.out.println("(char)res = " + (char)res);
}
fileReader.close();
}
private static void writer001() throws IOException {
FileWriter fileWriter = new FileWriter("reader.txt");
fileWriter.write("十年磨一剑");
fileWriter.flush();
fileWriter.write("先苦后甜");
fileWriter.close();
// fileWriter.write("先苦后甜");
}
}
以上是字符流的基本使用
加入缓冲
package io;
import java.io.*;
public class MyBufferIO {
public static void main(String[] args) throws Exception {
// write001();
// reader001();
// copy001();
myread();
}
private static void myread() throws Exception {
MyReadLine myReadLine = new MyReadLine(new FileReader("1.txt"));
// BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bufer.txt"));
String res = null;
while ((res = myReadLine.line()) != null) {
System.out.println("res = " + res);
// bufferedWriter.write(res);
// bufferedWriter.newLine();//这个就是为了配合reader的。
// bufferedWriter.flush();
}
myReadLine.close();
// bufferedWriter.close();
}
private static void copy001() throws Exception {
BufferedReader bufferedReader = new BufferedReader(new FileReader("1.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bufer.txt"));
String res = null;
while ((res = bufferedReader.readLine()) != null) {
bufferedWriter.write(res);
bufferedWriter.newLine();//这个就是为了配合reader的。
bufferedWriter.flush();
}
bufferedReader.close();
bufferedWriter.close();
}
private static void reader001() throws Exception {
FileReader reader = new FileReader("312.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
String res = null;
while ((res=bufferedReader.readLine())!=null) {//以前是用-1 判断。现在用null来判断。返回的是String了。就这么一个差别
System.out.println("res = " + res);//不会读取到换行啊,必须要用println
}
reader.close();
}
private static void write001() throws Exception {
FileWriter wr = new FileWriter("312.txt");
BufferedWriter bufferedWriter = new BufferedWriter(wr);
bufferedWriter.write("用缓存看看,其实主要是换行");
bufferedWriter.newLine();//和不缓存之前比,就是多了一个换行功能。
bufferedWriter.write("换行了没啊?");
bufferedWriter.flush();
bufferedWriter.close();
}
}
自己写缓冲
package io;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class MyReadLine extends Reader{
Reader fileReader;
public MyReadLine(Reader fileReader) {
this.fileReader = fileReader;
}
public String line() throws Exception {
StringBuilder sb = new StringBuilder();
int res = 0;
while ((res = fileReader.read()) != -1) {
if (res =='\r') {
continue;
}
if (res == '\n') {
return sb.toString();
}else {
sb.append((char) res);
}
}
return sb.length()==0?null:sb.toString();
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
return fileReader.read(cbuf, off, len);
}
public void close() throws IOException {
fileReader.close();
}
}
这里其实是为了扩展,扩展的是一类东西。以后新增都没问题。
自己写一个numline
class MyNumLine extends MyReadLine {
private int count;
public MyNumLine(Reader fileReader) {
super(fileReader);
}
@Override
public String line() throws Exception {
count++;
return super.line();
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
private static void myLineRead() throws Exception {
MyNumLine myNumLine = new MyNumLine(new FileReader("1.txt"));
String res = null;
myNumLine.setCount(19);
while ((res = myNumLine.line()) != null) {
System.out.println(myNumLine.getCount()+":"+res);
}
}
效果和本来的一样。