1、知识回顾,10,I/O输入与输出,第,章,本章目标,理解流,掌握字节流,掌握过滤流,掌握字符流,运用文件和文件名过滤器,实现记事本程序,步骤一:创建记事本图形用户界面 步骤二:实现打开文件操作 步骤三:将打开文件内容读取到文本编辑框 步骤四:在编辑框内修改文件内容 步骤五:保存文件到磁盘,记事本项目操作演示,File类,File类用来进行文件的相关操作,它描述的是文件本身的属性。 File类创建的File对象是可以用来获取磁盘文件的相关信息。例如:权限、时间、日期、目录路径或目录层次结构。 File类被封装在java.io包中。,File类的常用方法,File类实例,根据文件路径创建File对
2、象,建立新文件,获得文件长度,流,Java程序通过流来完成输入/输出操作,流是程序和文件之间实现信息传输的通道。,流,流分为字节流和字符流 字节流:建立在InputStream和OutputStream这两个抽象类基础上,一般用来处理字节或二进制对象。 字符流:建立在Reader和Writer这两个抽象类基础上,一般用来处理字符或字符串。,InputStream的继承结构,InputStream 输入流父类,ByteArrayInputStream 字节数组输入流,FileInputStream 读取文件输入流,PipedInputStream 传送输入流,FilterInputStream
3、过滤流,BufferedInputStream 缓冲输入流,DataInputStream 数据输入流,InputStream类的常用方法,OutputStream的继承结构,OutputStream 输出流父类,ByteArrayOutputStream 字节数组输出流,FileOutputStream 读取文件输出流,PipedOutputStream 传送输出流,FilterOutputStream 过滤流,BufferedOutputStream 缓冲输出流,DataOutputStream 数据输出流,OutputStream类的常用方法,FileInputStream类,FileI
4、nputStream类创建了一个能从文件读取字节的InputStream类,它的两个常用构造函数如下:,FileInputStream(String filepath) 例如: FileInputStream f = new FileInputStream(“/test.bat”); FileInputStream(File Obj) 例如: File f = new File(“/test.bat”); FileInputStream f1 = new FileInputStream(f);,FileInputStream重载了抽象类InputStream的除了mark()和reset()以
5、外的其它方法。,FileInputStream类实例,/打开文件并读取信息操作 public String openFile() throws IOExceptionString FileInfo = “;if( f.exists() ) FileInputStream fis = new FileInputStream(f);byte b = new byte1024;int i = 0;if (fis.available() != 0 ) i = fis.read(b);FileInfo = new String(b,0,i);fis.close();else f.createNewFil
6、e();return FileInfo; ,根据文件创建文件输入流对象,文件输入流对象 中存在可读取的信息,从文件输入流对象中可读取信息到字节数组b,读取信息结束后关闭文件输入流,FileOutputStream类,FileOutputStream创建了一个可以向文件写入字节的OutputStream类,它常用的构造函数如下: FileOutputStream(String path) FileOutputStream(File Obj) FileOutputStream(String path,boolean append) FileOutputStream(File Obj,boolean
7、 append) 其中path是文件的路径,Obj是描述文件的File对象,FileOutputStream类实例,/文件写操作 public void saveFile(String TextInfo) throws IOException try FileOutputStream fos = new FileOutputStream(f);fos.write(TextInfo.getBytes(); fos.flush();fos.close();catch(IOException e) System.out.println(e); ,根据文件创建文件输出流对象,将文本框组件中的信息转换为
8、字节,通过文件输出流对象写入文件,清除文件输出流对象中的信息,关闭文件输出流对象,控制台输入流,import java.io.*; public class SystemInDemo public static void main(String args) throws IOExceptionSystem.out.print(“请输入一个字符串:“); byte b = new byte1024;int i = System.in.read(b);System.out.println(“你输入的字符串是 :“ + new String(b,0,i); ,控制台输入流:System类中的in(类
9、变量),这是一个InputStream对象,接收从控制台输入的信息并存放到字节数组b,运行结果,过滤流,过滤流对通过现有流传递的信息进行修改,它是使用FilterInputStream或FilterOutputStream的子类来创建的 过滤流典型的应用是缓冲流和包装流 缓冲流 缓冲输入流:BufferedInputStream 缓冲输出流:BufferedOutputStream 包装流: 数据包装输入流:DataInputStream 数据包装输出流:DataOutputStream,缓冲流,缓冲区是一片内存空间,可以将程序需要的数据先存放在这里,在程序需要读取数据时就可以在内存中获取,而
10、无需每次都到数据源那里去获取数据。,内存缓冲区,流,Kdfjdlfjdls Dfsd Dffads Dffsd Dfdsaf Dfdsaf Fda Sddfds a,缓冲输入流实例,import java.io.*; public class ConsoleBufferDemopublic static void main(String args) throws IOExceptionStringBuffer ConsoleInput = new StringBuffer();BufferedInputStream ConsoleBuffer = new BufferedInputStream
11、(System.in);char Ch;System.out.print(“请输入信息:“);doCh = (char)ConsoleBuffer.read();ConsoleInput.append(Ch);while(Ch != n);System.out.println(“从键盘输入的信息是:“ + ConsoleInput); ,创建缓冲 输入流对象,从缓冲 输入流对象中 读取信息,缓冲输出流实例,package notepad; import java.io.*; import javax.swing.*; public class FileBufferedOperateFile f
12、; public void saveFile(String TextInfo) throws IOExceptiontryFileOutputStream fos = new FileOutputStream( f );BufferedOutputStream BuffFos = new BufferedOutputStream(fos);BuffFos.write(TextInfo.getBytes();BuffFos.flush();BuffFos.close();catch(IOException e) System.out.println(e); ,创建缓冲 输出流对象,通过缓冲 输出
13、流对象输出信息到文件,数据包装流的常用方法,数据包装输出流实例,/从文件中读取数据 try FileOutputStream f = new FileOutputStream(“Data.dat“);BufferedOutputStream buff = new BufferedOutputStream(f);DataOutputStream DataOut = new DataOutputStream(buff);DataOut.writeDouble(3.1415926);DataOut.writeChar(a);DataOut.writeBytes(“Thas was pi:writeB
14、yten“);DataOut.close(); ,数据包装输入流实例,/从文件中读出数据 tryFileInputStream f = new FileInputStream(“Data.dat“);BufferedInputStream buff = new BufferedInputStream(f);DataInputStream DataIn = new DataInputStream(buff);System.out.println(DataIn.readDouble();System.out.println(DataIn.readChar();System.out.println(
15、DataIn.readLine();DataIn.close(); ,字符流,为了实现字符处理的国际化,采用了同一的编码标准-Unicode编码 字符流为实现处理Unicdoe编码的字符输入和输出提供方便有效的方法 字符流的输入流父类是Reader,字符流的输出流父类是Writer,字符流父类的方法与字节流父类的方法相对应。,Reader的继承关系,Reader,InputStreamReader,PipedReader,StringBufferInputStream,FilterReader,StringReader,CharArrayReader,BufferedReader,Pushba
16、ckReader,FileReader,LineNumberReader,Writer的继承关系,Writer,OutputStreamWriter,PipedWriter,FilterWriter,StringWriter,CharArrayWriter,BufferedWriter,FileWriter,LineNumberWriter,用字符流操作实现记事本文件读,public String openFile() throws IOExceptionString FileInfo = “;if(f.exists()FileReader fis = new FileReader(f);Bu
17、fferedReader BuffFis = new BufferedReader(fis);boolean eof = false;while(!eof)String line = BuffFis.readLine();System.out.println(line);if (line = null)eof = true;else FileInfo = FileInfo + line + n;BuffFis.close(); ,用字符流操作实现记事本文件写,public void saveFile(String TextInfo) throws IOException tryFileWriter f = new FileWriter(f);BufferedWriter Buff = new BufferedWriter(f);Buff.write(TextInfo);Buff.flush();Buff.close();catch(IOException e)System.out.println(e); ,总结,习题,作业,