1:IO流的概述
(1)用来处理设备(硬盘,控制台,内存)间的数据。
(2)java中对数据的操作都是通过流的方式。
(3)java用于操作流的类都在io包中。
(4)按照流操作的数据的类型不同:分为字节流和字符流。
字符流是为了方便中文的操作而来的。
(5)按照流的流向不同分为:输入流,输出流。
2:字节流和字符流
(1)字节流
输入字节流:InputStream
输出字节流:OutputStream
(2)字符流
输入字符流:Reader
输出字符流:Writer
(3)由于我们操作的是文件,所以,我们用的是字符的文件操作流
A:FileReader
B:FileWriter
3:FileWriter字符输出流
Writer:
write(int ch)
write(char[] chs)
write(char[] chs,int start,int end)
write(String s)
write(String s,int start,int end)
flush():刷新缓冲区
close():刷新缓冲区,并关闭流对象。
功能:向文件中写入内容。
步骤:
A:创建字符输出流对象
FileWriter fw = new FileWriter("a.txt");
B:写入数据
fw.write("hello");
C:关闭流
fw.close();
注意的问题:
A:流的操作会抛异常的。
B:如何追加数据,而不是覆盖数据呢?
是在构造中,传入第二个参数。表示是否追加
FileWriter fw = new FileWriter("a.txt",true);
C:如果换行呢?
Windows识别的换行是:\r\n
4:FileReader字符输入流
Reader:
read():返回一个字符
read(char[] chs):将字符读取到一个字符数组中,返回实际读取的元素个数。
功能:从文件中读取数据,并输出到控制台。
步骤:
A:创建输入流对象
FileReader fr = new FileReader("a.txt");
B:通过输入流对象读取数据
//int ch = fr.read();读取一个字符
//第一种读取方式
//为了读取多个,我们用循环改进
int ch = 0;
while((ch=fr.read())!=-1)
{
System.out.print((char)ch);
}
//第二种读取方式
char[] chs = new char[1024]; //这个地方长度不好确定,但是,一般一1k为一个基本单位。
int len = 0;
while((len=fr.read(chs))!=-1)
{
System.out.print(new String(chs,0,len));
}
C:关闭输入流对象
5:复制文本文件
思路:
创建输入流对象,用于读取源文件中的数据。
创建输出流对象,用于往指定文件写入数据。
6:字符缓冲流
A:BufferedReader:readLine()
BufferedWriter:newLine()
B:如何使用呢?
缓冲流底层操作的仍然用的是基本的字符流。
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
String line = null;
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
C:装饰设计模式和继承的区别
装饰更灵活。继承让类显得臃肿
7:字节流
A:InputStream
OutputStream
B:FileInputStream
FileOutputStream
C:转换流
字节流到字符流 InputStreamReader
字符流到字节流 OutputStreamWriter
从键盘获取数据,写到控制台。
//让输入流指向键盘
BufferedReader br = new BufferedReader(new InputStreamReader(Sysetm.in));
//让输出流指向控制台
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))
String line = null
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
从键盘获取数据,写到文件中。
//让输入流指向键盘
BufferedReader br = new BufferedReader(new InputStreamReader(Sysetm.in));
//让输出流指向文件
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
//也可以如下使用
//BufferedWriter bw = new BufferedWriter(new OutputSteramWriter(new FileOutputStream("a.txt")));
String line = null
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
从文件中获取数据,写到控制台。
//让输入流指向文件
//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputSteram("a.txt")));
//也可以如下写
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//让输出流指向控制台
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
从文件获取数据,写到文件中。
//让输入流指向文件
//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputSteram("a.txt")));
//也可以如下写
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//让输出流指向文件
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
//也可以如下使用
//BufferedWriter bw = new BufferedWriter(new OutputSteramWriter(new FileOutputStream("b.txt")));
String line = null
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
操作流的规律:明确几个问题就可以很容易的操作流。
1:明确数据源和目的地。
A:数据源
InputStream,Reader
B:目的地
OutputStream,Writer
2:明确数据的内容是否是文本
A:是
数据源:Reader
目的地:Writer
B:否
数据源:InputStream
目的地:OutputStream
3:明确具体的设备
A:数据源
键盘输入(System.in),内存(数组或者字符串),硬盘(文件)
B:目的地
控制台(System.out),内存(数组或者字符串),硬盘(文件)
如果是键盘和控制台的时候,考虑是否需要方便使用一些操作。
如果需要,可能需要用到转换流。
4:是否需要高效
A:是
用Buffer的流
B:否
不用Buffer的流
举例分1:复制一个文本文件
1:明确数据源和目的地
A:数据源
InputStream,Reader
B:目的地
OutputStream,Writer
2:明确是否是文本
A:是
数据源:Reader - FileReader
目的地:Writer - FileWriter
3:明确设备:
数据源:文件 a.txt
目的地:文件 b.txt
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
4:是否需要高效
是
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
String line = null
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
举例分析2:把控制台的内容写到一个文件中
1:明确数据源和目的地
A:数据源
InputStream,Reader
B:目的地
OutputStream,Writer
2:明确是否是文本
数据源不是:InputStream
目的地是: Writer - FileWriter
3:明确设备:
数据源:键盘录入
目的地:文件 b.txt
InputStream is = System.in;
FileWriter fw = new FileWriter("b.txt");
4:是否需要高效
是
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
String line = null
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
|