本帖最后由 牛德阳 于 2016-1-1 22:49 编辑
Reader:用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。
Writer:写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()- package day18;
- import java.io.*;
- /*把文件内容拷贝到另一个文件*/
- public class filelianxi {
- public static void main(String[] args) throws IOException {
- //copy1();
- copy2();
- }
-
- public static void copy1() throws IOException//第一种拷贝方法
- {
- FileReader fr=new FileReader("c:\\ioException.txt");
- FileWriter fw=new FileWriter("c:\\ioException.java");
- int num;
- while((num=fr.read())!=-1)
- {
- fw.write(num);
- }
- fr.close();
- fw.close();
- }
- public static void copy2() // 第二中拷贝方法 {
- FileReader fr=null;
- FileWriter fw = null;
- try {
- fr = new FileReader("c:\\ioException.txt");
- char[] arr=new char[1024];
- fw = new FileWriter("c:\\ioException1.java");
-
- int length=0;
- while((length=fr.read(arr))!=-1)
- {
- fw.write(arr, 0, length);
-
- }
- }
- catch (IOException e) {
-
- e.printStackTrace();
- }
-
- finally{
- try {
- if(fr!=null)
- fr.close();
- } catch (IOException e) {
-
- e.printStackTrace();
- }
- try {
- if(fw!=null)
- fw.close();
- } catch (IOException e) {
-
- e.printStackTrace();
- }
- }
- }}
复制代码 BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可
以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
自定义BufferedReader实现其功能
- package day19;
- import java.io.FileReader;
- import java.io.IOException;
- public class myBufferedReader {
- private FileReader fr;
- public myBufferedReader(FileReader fr)//构造方法
- {
- this.fr=fr;
- }
-
- public String myReadLine() throws IOException//实现ReadLine()功能
- {
- StringBuffer sb=new StringBuffer();
- int ch=0;
- while((ch=fr.read())!=-1)
- {
- if(ch=='\r')
- continue;
- if(ch=='\n')//window里回车符是\r\n读到\n的时候行读取完毕返回字符串
- return sb.toString();
- else
- sb.append((char)ch);
- }
- if(sb.length()!=0)
- return sb.toString();
- return null;
- }
-
- public void myclose() throws IOException{
- fr.close();//关闭FileReader流
- }
- }
复制代码
BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写
入。
下面是用BufferedReaer和BufferedWriter拷贝文件的例子:
- package day19;
- import java.io.*;
- public class buffercopydemo {
- public static void main(String[] args) {
- BufferedWriter bufw=null;
- BufferedReader bufr=null;
- try
- {
- bufr=new BufferedReader(new FileReader("bufferwriterdemo.java"));
- bufw=new BufferedWriter(new FileWriter("buf.txt"));
- String line=null;
- while((line=bufr.readLine())!=null)
- {
- bufw.write(line);
- bufw.flush();
- bufw.newLine();
- }
- }
- catch(IOException e)
- {
- throw new RuntimeException("读写失败");
- }
- finally
- {
- try
- {
- if(bufw!=null)
- {
- bufw.close();
- }
- if(bufr!=null){ bufr.close();}
- }
- catch(IOException e){
- throw new RuntimeException("读写失败");
- }
- }
- }
- }
复制代码
LineNumberReader : 跟 踪 行 号 的 缓 冲 字 符 输 入 流 。 此 类 定 义 了 方 法 setLineNumber(int) 和
getLineNumber(),它们可分别用于设置和获取当前行号。
自定义LineNumberReader 实现该类的功能
- package day19;
- import java.io.FileReader;
- import java.io.IOException;
- public class myLineNumberReader extends myBufferedReader {
复制代码 InputStream:是表示字节输入流的所有类的超类。
FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环
FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
OutputStream:此抽象类是表示输出字节流的所有类的超类。
FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
以下是字节流读取文件的三种方式:
- package day19;
- import java.io.*;
- public class fileStream1 {
- public static void main(String[] args) throws IOException {
- FileOutputStream fos=new FileOutputStream("buf.txt");
- FileInputStream fis=new FileInputStream("buf.txt");
- write(fos);
- read_1(fis);
- read_2(fis);
- read_3(fis);
- }
- public static void write(FileOutputStream fos) throws IOException
- {
- fos.write("niudeyang".getBytes());//将字符串转换成字节数组写入文件中
- fos.close();
- }
- public static void read_1(FileInputStream fis) throws IOException//第一种读取方式
- {
- int i;
- while((i=fis.read())!=-1)
- {
- System.out.print((char)i);
- }
- fis.close();
- }
- public static void read_2(FileInputStream fis) throws IOException//第二种读取方式把读取内容放入创建的字节数组中
- {
- byte[] b=new byte[1024];//数组长度为1024的整数倍
- int i=0;
- while((i=fis.read(b))!=-1)
- {
- System.out.println(new String(b,0,i));
- }
- fis.close();
- }
- public static void read_3(FileInputStream fis) throws IOException
- {
- byte[] b=new byte[fis.available()];//利用fis.available()设置数组大小提高效率无需循环
-
- fis.read(b);
-
- System.out.println(new String(b));
-
- fis.close();
- }
- }
复制代码- package day19;
- /*用实现缓冲的字节流拷贝MP3文件<span style="line-height: 2.2em;">*/</span>
复制代码- package day19;
- import java.io.*;
- public class transStream2 {
- /*1.需求1:从键盘输入并打印一行数据
- * 需求2:读取文件中内容并打印
- * 需求3:从键盘输入数据存储在文件
- */
- public static void main(String[] args) throws IOException {
-
- xuqiu_1();
- xuqiu_2();
- xuqiu_3();
-
- }
- private static void xuqiu_3() throws IOException {//需求3:从键盘输入数据存储在文件中
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("buf.txt",true),"UTF-8"));
- String str=null;
- while((str=br.readLine())!=null){
- bw.write(str.toUpperCase());
- bw.flush();
- ;
- }
- br.close();
- bw.close();
- }
- private static void xuqiu_2() throws IOException {//需求2:读取文件中内容并打印
- BufferedReader br=new BufferedReader( new FileReader("buf.txt"));
- BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
- String str=null;
- while((str=br.readLine())!=null){
- bw.write(str.toUpperCase());
- bw.flush();
- ;
- }
- br.close();
-
-
- }
- private static void xuqiu_1() throws IOException {//需求1:从键盘输入并打印一行数据
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
- BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
- String str=null;
- while((str=br.readLine())!=null){
- if("over".equalsIgnoreCase(str))
- break;
- bw.write(str.toUpperCase());
- bw.flush();
- ;
- }
- br.close();
-
- }
- }
复制代码
|
|