黑马程序员——java基础知识篇——>IO流

来源:互联网 发布:网络端口线连接 编辑:程序博客网 时间:2024/05/16 09:31

-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

一、概述

特点:

        a、IO流用来处理设备之间的数据传输。

        b、Java对数据的操作是通过流的方式。

        c、Java用于操作流的对象都在IO包中。

        d、流按操作数据分为两种:字节流和字符流。

        e、流按流向分为:输入流和输出流。

IO流的常用基本类:

        1 字节流:InputStreamOutputStream

        2 字符流:ReaderWriter

写方法展示

public class FileWriterDemo {/** * @param args * @throws IOException  */public static void main(String[] args) throws IOException {//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件//而且该文件会被创建到指定("d:\\demo.txt")目录下,如果该目录下已经有同名文件,则该文件将被覆盖//其实该步骤就是在明确数据要存放的目的地FileWriter fw = new FileWriter("demo.txt");//调用write方法,将字符串写入到流中fw.write("abcde");//刷新流对象中缓冲中的数据;将数据刷新到目的地fw.flush();//关闭流资源,但是关闭之前会刷新一次内部缓冲中的数据。//将数据刷新到目的地中//和flush区别:flush刷新后可以继续使用;close刷新后会将流关闭fw.close();//关闭前会刷新一次,把数据刷新出来}}
读方法展示

public class FileReaderDemo {public static void main(String[] args)throws IOException {FileReader fr = new FileReader("e:\\demo.txt");//第一种读取方式/*int ch=0;while((ch=fr.read())!=-1){System.out.println((char)ch);}*//*while(true){int ch=fr.read();if(ch==-1)break;System.out.println((char)ch);}*///第二种读取方式//FileReader fr = new FileReader("e:\\demo.java"); //这是读取java文件方式char[] buf = new char[1024];int num = 0;while((num = fr.read(buf))!=-1){System.out.println(new String(buf,0,num));}fr.close();//这里的close只有关闭的作用}}
流的异常处理方式

public class FileWriterException {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubFileWriter fw = null;try {fw = new FileWriter("e:\\demo.txt",true);//这里传递一个参数true代表不覆盖已有文件,并在已有文件末尾进行续写fw.write("\r\npoiu");//这里续写} catch (IOException e) {System.out.println(e.toString());} finally {try {if (fw != null)//为什么是不等于null,因为fw如果为null关闭不了资源,只有fw有资源才能关闭fw.close();} catch (IOException e) {System.out.println(e.toString());}}}}
为了增加读写数据效率加入缓冲区BufferedReader和BufferedWriter

以示例方式进行展示:复制文件

public class BufferedCopy {public static void main(String[] args) {BufferedReader bufr = null;BufferedWriter bufw = null;try{bufr = new BufferedReader(new FileReader("e:\\buf.txt"));bufw = new BufferedWriter(new FileWriter("e:\\buf_copy.txt"));String line = null;while((line=bufr.readLine())!=null){bufw.write(line);bufw.newLine();bufw.flush();}}catch(IOException e){throw new RuntimeException("复写失败");}finally{try{if(bufr!=null)bufr.close();}catch(IOException e){throw new RuntimeException("读取关闭失败");}try{if(bufw!=null)bufw.close();}catch(IOException e){throw new RuntimeException("写入关闭失败");}}}}

单读取流的示例:行读取

public class BufferedReaderDemo {public static void main(String[] args)throws IOException {FileReader fr = new FileReader("e:\\buf.txt");BufferedReader bufr = new BufferedReader(fr);//循环读取数据/*char[] chs = new char[1024];int len = 0;while((len=bufr.read(chs))!=-1){System.out.println(new String(chs,0,len));}bufr.close();*///单行读取数据String line = null;while((line=(bufr.readLine()))!=null){System.out.println(line);}bufr.close();}}

BufferedWriter特有的方法换行示例

public class BufferedWriteDemo {public static void main(String[] args)throws IOException {//创建一个字符写入流对象FileWriter fw = new FileWriter("e:\\buf.txt");//为了提高字符写入流的效率,加入了缓冲技术//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可BufferedWriter bufw = new BufferedWriter(fw);for(int x=1;x<5;x++){bufw.write("abc"+x);bufw.newLine();//换行bufw.flush();//只要用到缓冲区就要刷新}//关闭缓冲区就是在关闭缓冲区的流对象bufw.close();}}
LineNumberReader将读取的java文件加入行

public class LineNumberReaderDemo {public static void main(String[] args){FileReader fr = null;LineNumberReader lnr = null;try{fr = new FileReader("e:\\MathDemo.java");lnr = new LineNumberReader(fr);String line=null;lnr.setLineNumber(100);//设定行号从100开始while((line=lnr.readLine())!=null){System.out.println(lnr.getLineNumber()+":"+line);}}catch(IOException e){System.out.println("erro");}finally{//不能忘了finallytry{lnr.close();}catch(IOException e){System.out.println("关闭失败");}}}}
根据LineNumberReader自己写一个程序模仿功能

class MyLineNumReader {private Reader fr;private int lineNumber = 0;MyLineNumReader(Reader fr) {this.fr = fr;}public int getLineNumber() {return lineNumber;}public void setLineNumber(int lineNumber) {this.lineNumber = lineNumber;}public String MyLineNumber() throws IOException {StringBuilder sb = new StringBuilder();int ch = 0;lineNumber++;//读一行才自增,所以放在while外面while ((ch = fr.read()) != -1) {if (ch == '\r')continue;if (ch == '\n')return sb.toString();elsesb.append((char) ch);}if (sb.length() != 0)return sb.toString();return null;}public void MyClose() throws IOException {fr.close();}}public class MyLineNumberReader {public static void main(String[] args) throws IOException {FileReader fir = new FileReader("e:\\mm.java");MyLineNumReader ml = new MyLineNumReader(fir);String line = null;ml.setLineNumber(100); // 设置行号while ((line = ml.MyLineNumber()) != null) {System.out.println(ml.getLineNumber() + ":" + line);}ml.MyClose();}}


-----------android培训java培训、java学习型技术博客、期待与您交流!------------ 



0 0