黑马程序员 ---IO输入输出(一)

来源:互联网 发布:js同源策略是什么意思 编辑:程序博客网 时间:2024/06/04 18:27

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------



概述:

IO流用来处理设备之间的数据传输;

Java对数据的操作是通过流的方式;

Java用于操作流的对象都在IO包中;
流按操作数据分为两种:字节流与字符流;

流按流向分为:输入流,输出流;


字节流的抽象基类:InputStream ,OutputStream。
字符流的抽象基类: Reader ,Writer。


创建对象并写入数据:

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


IO异常的处理方式。

import java.io.*;class  FileWriterDemo{public static void main(String[] args) {FileWriter fw =null;try{fw = new FileWriter("Demo.txt");fw.write("abcdef");fw.flush();}catch (IOException e){System.out.println(e.toString());}finally {try{if (fw!==null)fw.close();}catch (IOException e){System.out.println(e.toString());}}}}


传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
FileWriter fw = new FileWriter("demo.txt",true);


两种方法读取文件:

import java.io.*;import java.util.*;class FileReaderDemo {public static void main(String[] args) throws IOException{FileReader fr = new FileReader("Demo.txt");int a = 0;while ((a=fr.read())!=-1){System.out.println((char)a);}/*char[] buf = new char[1024];int a=0;while ((a=fr.read(buf))!=-1){System.out.println(a+"..."+new String(buf,0,a));}*/fr.close();}}



字符流的缓冲区


缓冲区的出现提高了对数据的读写效率。
对应类
BufferedWriter
 BufferedReader
缓冲区要结合流才可以使用。
在流的基础上对流的功能进行了增强

/*通过缓冲区复制一个.java文件。*/import java.io.*;class  CopyTextByBuf{public static void main(String[] args) {BufferedReader bufr = null;BufferedWriter bufw = null;try{bufr = new BufferedReader(new FileReader("BufferedWriterDemo.java"));bufw = new BufferedWriter(new FileWriter("bufWriter_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("写入关闭失败");}}}}


模拟一个BufferedReader


import java.io.*;class MyBufferedReader{private FileReader r;MyBufferedReader(FileReader r){this.r = r;}public String myReadLine() throws IOException{StringBuilder sb = new StringBuilder();int a = 0;while ((a=r.read())!=-1){if (a=='\r')continue;if (a=='\n')return sb.toString();elsesb.append((char)a);}if (sb.length()!=0) return sb.toString();return null;}public void myClose() throws IOException{r.close();}}class  MyBufferedTest{public static void main(String[] args) throws IOException{FileReader fr = new FileReader("buf.txt");MyBufferedReader bufr = new MyBufferedReader(fr);String line = null; while ((line=bufr.myReadLine())!=null) { System.out.println(line); } bufr.myClose();}}

19-11 字节流读写数据

import java.io.*;class FileStream {public static void main(String[] args) throws IOException {//outputStream();inputStream();}public static void outputStream() throws IOException //字节流写入数据{FileOutputStream fps = new FileOutputStream("file.txt");fps.write("abcdefg".getBytes());fps.close();}public static void inputStream() throws IOException//字节流读取数据{FileInputStream fis = new FileInputStream("file.txt");byte[] b = new byte[fis.available()]; fis.read(b);System.out.println(new String(b));}}


读取转换流

//获取键盘录入对象。
//InputStream in = System.in;


//将字节流对象转成字符流对象,使用转换流。InputStreamReader
//InputStreamReader isr = new InputStreamReader(in);


//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
//BufferedReader bufr = new BufferedReader(isr);




//键盘的最常见写法。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));


需求:
通过键盘录入数据。
当录入一行数据后,就将该行数据进行打印。
如果录入的数据是over,那么停止录入。

import java.io.*;class  TransStreamDemo{public static void main(String[] args) throws IOException {InputStream in= System.in;InputStreamReader isr = new InputStreamReader(in);BufferedReader buf = new BufferedReader(isr);String line = null;while ((line = buf.readLine())!=null){if ("over".equals(line))break;System.out.println(line);}buf.close();}}


写入转换流

import java.io.*;class  TransStreamDemo{public static void main(String[] args) throws IOException {InputStream in = System.in;InputStreamReader isr = new InputStreamReader(in);BufferedReader bufr = new BufferedReader(isr);//BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));OutputStream ost  =System.out;OutputStreamWriter osw = new OutputStreamWriter(ost);BufferedWriter bufw = new BufferedWriter(osw);//BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));String line = null;while ((line = bufr.readLine())!=null){if ("over".equals(line))break;bufw.write(line);bufw.newLine();bufw.flush();}bufr.close();}}




原创粉丝点击