1 / 17

第 21 讲 Java 的输入与输出流 ( 下 )

第 21 讲 Java 的输入与输出流 ( 下 ). Reader 类和 Writer 类. 字符流提供了处理字符的输入 / 输出的方法,包括两个抽象类 Reader 和 Writer 。字符流 Reader 指字符流 的 输入流,用于输入,而 Writer 指字符流 的 输出流,用于输出。 Reader 和 Writer 使用的是 Unicode ,可以对不同格式的流进行操作。 从 Reader 和 Writer 派生出的子类的对象 都 能对 Unicode 字符流进行操作,由这些对象来实现与外设的连接。. Reader 类常用方法. Writer 类常用方法.

freja
Télécharger la présentation

第 21 讲 Java 的输入与输出流 ( 下 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第21讲 Java的输入与输出流(下)

  2. Reader类和Writer类 • 字符流提供了处理字符的输入/输出的方法,包括两个抽象类Reader和Writer。字符流Reader指字符流的输入流,用于输入,而Writer指字符流的输出流,用于输出。 • Reader和Writer使用的是Unicode,可以对不同格式的流进行操作。从Reader和Writer派生出的子类的对象都能对Unicode字符流进行操作,由这些对象来实现与外设的连接。

  3. Reader类常用方法

  4. Writer类常用方法

  5. 字符文件流FileReader和FileWriter类 • FileReader、FileWriter类用于字符文件的输入输出处理,与文件数据流FileInputStream、FileOutputStream的功能相似。 • 其构造方法如下: • public FileReader(File file) throws FileNotFoundException • public FileReader(String filename) throws FileNotFoundException • public FileWriter(File file) throws IOException • public FileWriter(String fileName,boolean append)throws IOException • FileReader从超类中继承了read、close等方法,FileWriter从超类中继承了write、close等方法。 • 例:FileReader in=new FileReader("java11.txt");

  6. 例11.5用FileReader一个字符一个字符地读取整个文件。例11.5用FileReader一个字符一个字符地读取整个文件。 import java.io.*; public class Ex11_5{ public static void main(String args[]){ FileReader fr; int ch; try { fr=new FileReader("c:\\Ex11_5.java"); while((ch=fr.read())!=-1){ System.out.print((char)ch); } }catch(Exception e){ e.printStackTrace(); } } }

  7. 字符缓冲流BufferedReader类和BufferedWriter类 • FileReader和FileWriter类以字符为单位进行输入输出,无法进行整行输入与输出,数据的传输效率很低。Java提供BufferedReader和BufferedWriter类以缓冲区方式进行输入输出,其构造方法如下: • public BufferedReader(Reader in) • public BufferedReader(Reader in,int sz) • public BufferedWriter(Writer out) • public BufferedWriter(Writer out,int sz) • BufferedReader流能够读取文本行,方法是readLine()。

  8. 字符缓冲流BufferedReader类和BufferedWriter类(续) • 通过向BufferedReader传递一个Reader对象或者Reader子类对象来创建一个BufferedReader对象,如: BufferedReader br=BufferedReader (new FileReader("java11.txt")); 然后再从流br中读取java11.txt中的内容。 • 类似的,可以将BufferedWriter流与FileWriter流连接起来,然后通过BufferedWriter流将数据写到目的地,例如: FileWriter fw=new FileWriter("java11.in"); BufferedWriter bw=new BufferedWriter(fw); • 然后使用BufferedReader类的成员方法write(String s int off,int len)把字符串s写到java11.in中,参数off是字符串s开始处的偏移量,len是写入的字符长度。

  9. 例11.6在例11.5中按字符一个一个的读取,效率比较低,现在应用BufferedWriter类来优化它,每次读取若干个字符。例11.6在例11.5中按字符一个一个的读取,效率比较低,现在应用BufferedWriter类来优化它,每次读取若干个字符。 import java.io.*; public class Ex11_6{ public static void main(String args[]){ FileReader fr; BufferedReader br; int ch; try{ fr=new FileReader("c:\\Ex11_6.java"); br=new BufferedReader(fr); while((ch=br.read())!=-1){ System.out.print((char)ch);} }catch(Exception e){ e.printStackTrace(); } } }

  10. 随机读写文件 • RandomAccessFile类创建的流与前面的输入输出流不同,RandomAccessFile类独立于字节流和字符流体系之外,不具有字节流和字符流的任何特性,它直接继承自Java的基类Object。RandomAccessFile类有两个构造方法。 • RandomAccessFile(String name,String mode):参数name用来确定一个文件名,给出创建的流的源,也可以是目的地。参数mode用来决定创建流对文件的访问权限,其值可以取r(只读)或者rw(可读写)。注意没有只写方式(w)。 • RandomAccessFile(File file,String mode):参数file是一个File对象,给出创建流的源,也可以是目的地。参数mode与前面的含义是一致的。

  11. RandomAccessFile类常用方法

  12. 例11.7应用类RandomAccessFile编写程序,实现将两个磁盘文件"input1.txt"和"input2.txt"中的内容合并,并显示在屏幕上。 import java.io.*; public class Ex11_7{ public static void main(String args[]){ String s=""; try{ RandomAccessFile f1=new RandomAccessFile("c:/input1.txt","rw"); RandomAccessFile f2=new RandomAccessFile("c:/input2.txt","rw"); s=f1.readLine()+f2.readLine(); char c[]=s.toCharArray(); for(int i=0;i<s.length();i++) System.out.print(c[i]); System.out.println(); } catch(Exception e){} } }

  13. 实例1 import java.awt.*; import java.awt.event.*; import java.io.*; public class Ex11_8 extends WindowAdapter implements ActionListener{ Frame f; Button btn; TextArea ta; String fileName; public static void main(String argv[]){ new Ex11_8("output.txt");} public Ex11_8(String fileName){ this.fileName = fileName; f = new Frame(fileName); f.addWindowListener(this); btn = new Button("保存文件"); btn.addActionListener(this); ta = new TextArea(10,40); f.add(ta, BorderLayout.CENTER); f.add(btn, BorderLayout.SOUTH); f.pack(); f.setVisible(true); }

  14. public void actionPerformed(ActionEvent e) { try { FileOutputStream fout = new FileOutputStream(fileName); byte buf[] = ta.getText().getBytes(); fout.write(buf); fout.close();} catch (IOException ioe){ System.err.println(e);} } public void windowClosing(WindowEvent e) { System.exit(0);} } 程序分析: 程序引入了系统包。定义了一个主类Ex11_8,继承了类Frame,且实现了事件监听器接口ActionListner。在主类中定义了一个构造方法,实现了图11-8的界面,并增加了事件监听器。方法actionPerformed()应用文件输出流将文本域中的文本写到指定的文件中。 windowClosing()方法实现关闭窗口。

  15. 实例2 import java.io.*; public class Ex11_9{ public static void main(String args[]){ try{ RandomAccessFiler rf=new RandomAccessFile("c:\\Ex11_9.java","rw"); String str; long pof=0; long lof=rf.length(); rf.seek(pof); int i=1; while(pof<lof){ str=rf.readLine(); System.out.println((i++)+""+str); pof=rf.getFilePointer(); } rf.close(); }catch(Exception e){ e.printStackTrace(); } }} 程序分析: 程序定义了一个主类Ex11_9,所有的代码都放在异常处理块try{}catch{},并实例化一个RandomAccessFile对象rf,while循环将该Java源程序显示出来,并在前面增加行号。close()方法关闭对象rf。

  16. 本章小结 • Java中的输入输出流,流根据流向分为输入流(InputStream)和输出流(OutputStream)两类,这些流都包括在系统包java.io中。 • 字节输入流都是从InputStream类继承的,InputStream及其子类中最主要的方法是read()方法 • 字节输出流都是从OutputStream类继承的,OutputStream及其子类中最主要的方法是write()方法 • 字符输入流都是从Reader类继承的,Reader及其子类中最主要的方法是read()方法 • 字符输出流都是从Writer类继承的,Writer及其子类中最主要的方法是write()方法 • 随机读写文件类

  17. 本章实训 • 实验目的 • 理解数据流的概念。 • 理解Java流的层次结构。 • 理解文件的概念。 • 通过实训了解从标准输入输出设备上输入输出数据的方法。 • 掌握字节流和字符流的基本使用方法,并总结对比它们的联系和区别。 • 参考配套实训手册的实训十五

More Related