毕向东笔记
1.输入输出流,字节字符流,Buffered关系
IO流用来处理设备之间的数据传输
输入流(硬盘到内存)读
输出流(内存到硬盘)写
字节流0101101(字节读取流,字节写入流)
字符流abcdefg(字符读取流,字符写入流)字节流加编码表
缓冲区:(结合流提高读写效率)
(Writer)BufferedWriter
(Reader)BufferedReader
字节流InputStream OutputStream | 字符流Reader Writer | |
---|---|---|
输入流(R) | FileInputStream | 文本:(InputStreamReader)FileReader |
输出流(W) | FileOutputStream | 文本:(OutputStreamWriter) FileWriter |
2.树状图
字符流:
Reader
|-BufferedReader(装饰)
|-LineNumberReader
|-InputStreamReader(字节转字符)
|-FileReader
Writer
|-BufferedWriter(装饰)
|-OutputStreamWriter(字符转字节)
|-FileWriter
字节流:
InputStream
|-FileInputStream
|-BufferedInputStream(装饰)
OutputStream
|-FileOutputStream
|-BufferedOutputStream(装饰)
***
FileWriter("demo.txt",ture)//续写
LINE SEPARATOR = System.getProperty("line.separator")//换行
windows:\r\n
linux:\n
***
3.FileWriter和BufferedWriter
public class FileWriterDemo {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("k:\\demo.txt", true);\\FileNotFoundException
fw.write("abcde");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fw != null)\\不写会有NullPointerException
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("demo.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("abcd你好");
bufw.newLine(); //换行
bufw.write("abcd你好");
bufw.close();
}
}
4.FileReader和BufferedReader
public class FileReaderDemo {
public static void main(String[] args) throws IOException {
InputStreamReader fr = new FileReader("demo.txt");
char[] buf = new char[1024];
int len = 0;
while ((len = fr.read(buf)) != -1) {
System.out.println(new String(buf,0,len));
}
}
}
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("demo.txt");
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while ((line = bufr.readLine()) != null) {
System.out.println(line);
}
bufr.close();
}
}
5.字符流的Copy(文本拷贝)
public class CopyDemo {
private static final int BUFFER_SIZE = 1024;
public static void main(String[] args) throws IOException {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("demo.txt");
fw = new FileWriter("demo2.txt", true);
//创建一个临时容器,用于缓存读取到的字符
char[] buf = new char[BUFFER_SIZE];
//定义一个变量记录读取到的字符数
int len = 0;
while ((len = fr.read(buf)) != -1) {
fw.write(buf,0,len);
}
} catch (IOException e) {
throw new RuntimeException("读写失败");
}finally {
if (fw!=null)
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
if (fr!=null)
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class BufferedCopyDemo {
public static void main(String[] args) throws IOException {
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
FileReader fr = new FileReader("demo.txt");
FileWriter fw = new FileWriter("demo2.txt", true);
bufr = new BufferedReader(fr);
bufw = new BufferedWriter(fw);
String line = null;
while ((line = bufr.readLine()) != null) {
bufw.write(line);
bufw.newLine();
bufw.flush();
}
} catch (IOException e) {
throw new RuntimeException("读写失败");
}finally {
if (bufw!=null)
try {
bufw.close();
} catch (IOException e) {
e.printStackTrace();
}
if (bufr!=null)
try {
bufr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
6.字节流的Copy(媒体拷贝)
字节流复制媒体文件
public class MediaCopyDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("1.mp3");
// BufferedInputStream bufis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("4.mp3");
// BufferedOutputStream bufos = new BufferedOutputStream(fos);
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
fos.write(buf,0,len);
}
fos.close();
fis.close();
}
}
7.字节转字符 InputStreamReader
public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
//字节流
InputStream in = System.in;
//字节转字符
InputStreamReader isr = new InputStreamReader(in);
//字符流
BufferedReader bufr = new BufferedReader(isr);
String line = null;
while ((line = bufr.readLine()) != null) {
if ("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
}
}
简化:
字节转字符
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
字符转字节
BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(System.out));
8合理选择流对象
1,明确源和目的(汇)
源:InputStream Reader
目的:outputStream Writer
2,明确数据是否是纯文本数据。
源:是纯文本:Reader
否:InputStream
目的:是纯文本Writer
否:outputStream
3,明确具体的设备。
源设备:
硬盘:File
键盘:system.in
内存:数组
网络:Socket流
目的设备:
硬盘:File
键盘:system.out
内存:数组
网络:Socket流
4,是否需要其他额外功能。
1,是否需要高效(缓冲区);
是,就加上buffer.
需求一:复制一个文本文件
FileReader FileWriter
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));
需求二:读取键盘录入信息,并写到文件
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));
需求三:文本文件输出到控制台
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(System.out));
需求四:读取键盘录入显示到控制台上
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(System.out));
需求五:将一个中文字符串数据按照指定编码表写到一个文本中
BufferedWriter bufw = new BufferedWriter(new OutputStreamReader(new FileOutputStream("a.txt"),"utf-8");
固定读写代码:
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}