输入输出流和文件操作.pptx
9.1 文件和流的概念9.1.1 操作系统中的文件和目录概念9.1.2 程序设计语言中的文件类型9.1.3 流的概念9.1.4 Java的输入/输出流与文件操作概述第1页/共41页9.1.1 操作系统中的文件和目录概念文件与文件系统录结构与文件检索文件的逻辑结构流式文件记录式文件文件的存取方法顺序存取随机存取文件的使用操作接口程序接口第2页/共41页9.1.2 程序设计语言中的文件类型文件类型概念文件与数组的区别数组是由固定多个元素组成,而文件的长度是不确定的、任意的。数组元素总是存放在内存,而文件则往往与外部介质相联系。以“数组变量下标”的形式可以访问数组中的任意一个元素,而文件不能通过下标形式访问,需要通过文件对象调用相应方法来访问。第3页/共41页9.1.3 流的概念流的定义和作用流的定义、方向性和读/写操作流采用缓冲区技术流的作用流的存在第4页/共41页9.1.4 Java的输入/输出流与文件操作概述流类InputStream抽象的字节输入流类OuputStream抽象的字节输出流类Reader抽象的字符输入流类Writer抽象的字符输出流类文件操作类File文件类RandomAccessFile随机存取文件类第5页/共41页9.2 字节输入/输出流类9.2.1 字节输入流类InputStream9.2.2 字节输出流OutputStream类9.2.3 Java的标准输入/输出9.2.4 文件字节输入/输出流类9.2.5 数据字节输入/输出流类9.2.6 对象输入/输出流类第6页/共41页9.2.1 字节输入流类InputStreamInputStream类public abstract class InputStream extends Object implements Closeable public abstract int read()throws IOException;/返回读取的一个字节,抽象方法 public int read(byte b)throws IOException /从输入流中读取若干字节到指定缓冲区,返回实际读取的字节数 public void close()throws IOException /关闭输入流,空方法第7页/共41页2.InputStream类的子类第8页/共41页9.2.2 字节输出流OutputStream类OuputStream类public abstract class OutputStream extends Object implements Closeable,Flushable public abstract void write(int b)throws IOException;/写入一个字节,抽象方法 public void write(byte b)throws IOException /将缓冲区中的若干字节写入输出流 public void flush()throws IOException /立即传输 public void close()throws IOException /关闭输出流,空方法第9页/共41页2.OutputStream类的子类第10页/共41页9.2.3 Java的标准输入/输出标准输入/输出常量public final class System extends Object public final static InputStream in/标准输入常量 public final static PrintStream out/标准输出常量 public final static PrintStream err/标准错误输出常量第11页/共41页2.PrintStream类public class PrintStream extends FilterOutputStream public void print(boolean b)public void print(char c)public void print(long l)public void print(int i)public void print(float f)public void print(double d)public void print(String s)public void print(Object obj)public void println()第12页/共41页【例9.1】标准输入/输出。图9.5 标准输入过程 第13页/共41页图9.6 标准输出过程 第14页/共41页9.2.4 文件字节输入/输出流类FileInputSream类public class FileInputStream extends InputStream public FileInputStream(String name)throws FileNotFoundException public FileInputStream(File file)throws FileNotFoundException 第15页/共41页2.FileOutputStream类public class FileOutputStream extends OutputStream public FileOutputStream(String name)throws FileNotFoundException public FileOutputStream(File file)throws FileNotFoundException public FileOutputStream(String name,boolean append)throws FileNotFoundException第16页/共41页【例9.2】使用文件字节输入/输出流实现文件的输入/输出操作。文件输入操作文件输出操作文件复制操作 第17页/共41页9.2.5 数据字节输入/输出流类DataInputStream类public class DataInputStream extends FilterInputStream implements DataInput public DataInputStream(InputStream in)/构造方法 public final short readShort()throws IOException public final byte readByte()throws IOException public final int readInt()throws IOException /读取一个整型 public final long readLong()throws IOException public final float readFloat()throws IOException public final double readDouble()throws IOException public final char readChar()throws IOException /读取一个字符 public final boolean readBoolean()throws IOException 第18页/共41页2.DataOutputStream类public class DataOutputStream extends FilterOutputStream implements DataOutput public DataOutputStream(OutputStream out)/构造方法 public final void writeByte(int v)throws IOException public final void writeShort(int v)throws IOException public final void writeInt(int v)throws IOException /写入一个整型 public final void writeLong(long v)throws IOException public final void writeFloat(float v)throws IOException public final void writeDouble(double v)throws IOException public final void writeChar(int v)throws IOException /写入一个字符 public final void writeBoolean(boolean v)throws IOException public final void writeChars(String s)throws IOException /写入一个字符串 public final int size()/返回实际写入的字节数第19页/共41页【例9.3】将Fibonacci序列值写入一个整数类型文件中。数据写入文件的思路同标准输出捕获异常控制输入结束 第20页/共41页9.2.6 对象输入/输出流类ObjectInputStream类public class ObjectInputStream extends InputStream implements ObjectInput,ObjectStreamConstants public ObjectInputStream(InputStream in)throws IOException /构造方法 public final Object readObject()throws IOException,ClassNotFoundException/读取一个对象第21页/共41页2.ObjectOutputStream类public class ObjectOutputStream extends OutputStream implements ObjectOutput,ObjectStreamConstants public ObjectOutputStream(OutputStream out)throws IOException/构造方法 public final void writeObject(Object obj)throws IOException /写入一个对象【例9.4】使用对象流将若干学生对象写入以对象为基本类型的记录式文件中。第22页/共41页图9.7 各种输入/输出流及其读/写方法 第23页/共41页9.3 字符输入/输出流类9.3.1 字符输入/输出流抽象类Reader和Writer9.3.2 文件字符输入/输出流类9.3.3 字符缓冲流类第24页/共41页9.3.1 字符输入/输出流抽象类Reader和WriterReader类public abstract class Reader extends Object implements Readable,Closeable public int read()throws IOException public int read(char cbuf)throws IOException abstract public int read(char cbuf,int off,int len)throws IOException;abstract public void close()throws IOException;第25页/共41页2.Writer类public abstract class Writer implements Appendable,Closeable,Flushable public void write(int c)throws IOException public void write(char cbuf)throws IOException public void write(String str)throws IOException /将字符串写入输出流 public Writer append(CharSequence csq)throws IOException public Writer append(char c)throws IOException public abstract void flush()throws IOException /将缓冲区内容写入输出流 public abstract void close()throws IOException 第26页/共41页9.3.2 文件字符输入/输出流类FileReader类public class FileReader extends InputStreamReader public FileReader(String fileName)throws FileNotFoundException /构造方法 public FileReader(File file)throws FileNotFoundException第27页/共41页2.FileWriter类public class FileWriter extends OutputStreamWriter public FileWriter(String fileName)throws IOException /构造方法 public FileWriter(String fileName,boolean append)throws IOException public FileWriter(File file)throws IOException public FileWriter(File file,boolean append)throws IOException 第28页/共41页9.3.3 字符缓冲流类BufferedReader类public class BufferedReader extends Reader public BufferedReader(Reader in)/构造方法 public String readLine()throws IOException /读取一行字符串,输入流结束时返回nullBufferedWriter类public class BufferedWriter extends Writer public BufferedWriter(Writer out)/构造方法 public BufferedWriter(Writer out,int sz)/sz指定字符缓冲区长度 public void newLine()throws IOException /写入一个换行符【例9.5】将Fibonacci序列值写入一个文本文件中。第29页/共41页9.4 文件操作类9.4.1 文件类File9.4.2 文件过滤器接口9.4.3 文件对话框组件9.4.4 随机存取文件类第30页/共41页9.4.1 文件类FileFile类的构造方法public class File extends Object implements Serializable,Comparable public File(String pathname)public File(String parent,String child)public File(File parent,String child)例如,File file=new File(myfile.txt);File dir=new File(.,);/创建一个目录文件对象,表示当前目录 File dir=new File(C:,);第31页/共41页2.File类提供的方法访问文件对象方法public String getName()/返回文件名,不包含路径名public String getPath()/返回相对路径名,包含文件名public String getAbsolutePath()/返回绝对路径名,包含文件名public String getParent()/返回父文件对象的路径名public File getParentFile()/返回父文件对象获得或设置文件属性文件操作方法目录操作方法【例9.6】当前目录文件列表。第32页/共41页9.4.2 文件过滤器接口FileFilter和FilenameFilter接口public interface FileFilter public boolean accept(File pathname)public interface FilenameFilter public boolean accept(File dir,String name)获得文件列表时使用过滤器public String list(FilenameFilter filter)/显示文件清单时使用过滤器public File listFiles(FilenameFilter filter)public File listFiles(FileFilter filter)第33页/共41页【例9.7】带过滤器的文件名列表。设置文件过滤条件 实现文件过滤操作方法 第34页/共41页9.4.3 文件对话框组件FileDialog类声明及构造方法FileDialog filedialog_open=new FileDialog(frame,Open,FileDialog.LOAD);/创建打开文件对话框FileDialog filedialog_save=new FileDialog(frame,SaveAs,FileDialog.SAVE);/创建保存文件对话框文件对话框的方法public String getFile()/获取选择的文件名public String getDirectory()/获取选择的路径第35页/共41页【例9.8】文件管理器和文本文件编辑器。文件管理器 文本文件编辑器 第36页/共41页9.4.4 随机存取文件类RandomAccessFilepublic class RandomAccessFile extends Object implements DataOutput,DataInput,Closeable public RandomAccessFile(String name,String mode)throws FileNotFoundException public RandomAccessFile(File file,String mode)throws FileNotFoundException public final int readInt()throws IOException /读一个整数类型值,当读到文件尾时,抛出EOFException异常 public final void writeInt(int v)throws IOException /写入一个整型值 public long length()throws IOException /返回文件长度 public long getFilePointer()throws IOException /获取文件指针位置 public void seek(long pos)throws IOException /设置文件指针位置 public void close()throws IOException /关闭文件【例9.9】在文件中添加不重复数据。第37页/共41页9.5 管道流及其应用PipedInputStream类PipedOutputStream类PipedInputStream in=new PipedInputStream();try PipedOutputStream out=new PipedOutputStream(in);catch(IOException ioe)第38页/共41页【例9.10】使用管道流实现发牌程序。图9.15 发牌程序中多个线程对象间的管道流 第39页/共41页实验9 输入/输出流与文件操作使用文件字节输入/输出流,合并两个指定文件;当文件中的数据已排序时,合并后的数据也要求是已排序的。将Java的关键字保存在一个文本文件中,判断一个字符串是否为Java的关键字。在例9.8的图形用户界面中,增加查找、替换字符串的功能。设计一个电话号码簿的应用程序,保存若干人的电话号码,要求具有图形用户界面。使用管道流在两个线程对象之间传送数据。第40页/共41页Java2程序设计实用教程(第2版)感谢您的观看!第41页/共41页