1、Java程序设计实用教程(第3版),第9章 输入/输出流和文件操作,9.1 文件和流的概念 9.2 字节输入/输出流类 9.3 字符输入/输出流类 9.4 文件操作,Java程序设计实用教程(第3版),9.1 文件和流的概念,9.1.1 操作系统中的文件和目录概念 9.1.2 流的概念 9.1.3 Java的输入/输出流与文件操作概述,Java程序设计实用教程(第3版),9.1.1 操作系统中的文件和目录概念,文件与文件系统 目录结构与文件检索 文件的逻辑结构 流式文件 记录式文件 文件的存取方法 顺序存取 随机存取 文件的使用 操作接口 应用程序接口,Java程序设计实用教程(第3版),9.
2、1.2 流的概念,流的定义和作用 流的定义、方向性和读/写操作 流采用缓冲区技术 流的作用 流的存在,Java程序设计实用教程(第3版),9.1.3 Java的输入/输出流与文件操作概述,流类 InputStream 抽象字节输入流类 OuputStream 抽象字节输出流类 Reader 抽象字符输入流类 Writer 抽象字符输出流类 文件操作类 File 文件类 RandomAccessFile 随机存取文件类,Java程序设计实用教程(第3版),9.2 字节输入/输出流类,9.2.1 抽象字节流 9.2.2 Java标准输入/输出 9.2.3 文件字节流 9.2.4 数据字节流 9.2
3、.5 对象字节流 9.2.6 管道字节流,Java程序设计实用教程(第3版),9.2.1 抽象字节流,InputStream类及其子类 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 IO
4、Exception /关闭输入流,空方法 ,Java程序设计实用教程(第3版),InputStream类的子类,Java程序设计实用教程(第3版),2. OutputStream类及其子类,public abstract class OutputStream extends Object implements Closeable, Flushable public abstract void write(int b) throws IOException; /写入一个字节,抽象方法public void write(byte b) throws IOException /将缓冲区中的若干字节写
5、入输出流public void flush() throws IOException /立即传输public void close() throws IOException /关闭输出流,空方法 ,Java程序设计实用教程(第3版),OutputStream类的子类,Java程序设计实用教程(第3版),9.2.2 Java标准输入/输出,标准输入/输出常量 public final class System extends Object public final static InputStream in /标准输入常量public final static PrintStream out /
6、标准输出常量public final static PrintStream err /标准错误输出常量 ,Java程序设计实用教程(第3版),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) p
7、ublic void print(String s) public void print(Object obj) public void println() ,Java程序设计实用教程(第3版),【例9.1】 标准输入/输出。,Java程序设计实用教程(第3版),9.2.3 文件字节流,FileInputSream类 public class FileInputStream extends InputStream public FileInputStream(String name) throws FileNotFoundExceptionpublic FileInputStream(File
8、 file) throws FileNotFoundException ,Java程序设计实用教程(第3版),2. FileOutputStream类,public class FileOutputStream extends OutputStream public FileOutputStream(String name) throws FileNotFoundExceptionpublic FileOutputStream(File file) throws FileNotFoundExceptionpublic FileOutputStream(String name, boolean
9、append) throws FileNotFoundException ,Java程序设计实用教程(第3版),【例9.2】 使用字节流读写文件。,文件输入操作 文件输出操作 文件复制操作,Java程序设计实用教程(第3版),9.2.4 数据字节流,public class DataInputStream extends FilterInputStream implements DataInput public DataInputStream(InputStream in) /构造方法public final short readShort() throws IOException publi
10、c 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 /读取字符pub
11、lic final boolean readBoolean() throws IOException ,Java程序设计实用教程(第3版),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(
12、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 I
13、OException /写入一个字符public final void writeBoolean(boolean v) throws IOException public final void writeChars(String s) throws IOException /写入一个字符串public final int size() /返回实际写入的字节数 ,Java程序设计实用教程(第3版),【例9.3】 使用数据流读写整数文件。,数据写入文件的思路同标准输出 捕获异常控制输入结束,Java程序设计实用教程(第3版),9.2.5 对象字节流,ObjectInputStream类 publi
14、c class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants public ObjectInputStream(InputStream in) throws IOException /构造方法public final Object readObject() throws IOException, ClassNotFoundException /读取一个对象 ,Java程序设计实用教程(第3版),2. ObjectOutputStream类,public class Obje
15、ctOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants public ObjectOutputStream(OutputStream out) throws IOException /构造方法public final void writeObject(Object obj) throws IOException /写入一个对象 【例9.4】 使用对象流读写记录式文件。,Java程序设计实用教程(第3版),图9.7 各种输入/输出流及其读/写方法,Java程序设计实用教程(第3版),9.
16、2.6 管道字节流,PipedInputStream类 PipedOutputStream类 PipedInputStream in = new PipedInputStream(); try PipedOutputStream out= new PipedOutputStream(in); catch(IOException ioe) ,Java程序设计实用教程(第3版),【例9.5】 使用管道流实现的发牌程序。,图9.9 发牌程序中多个线程对象间的管道流,Java程序设计实用教程(第3版),9.3 字符输入/输出流类,9.3.1 抽象字符流 9.3.2 文件字符流 9.3.3 缓冲字符流,
17、Java程序设计实用教程(第3版),9.3.1 抽象字符流,Reader类 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() th
18、rows IOException; ,Java程序设计实用教程(第3版),2. Writer类,public abstract class Writer implements Appendable, Closeable, Flushable public void write(int c) throws IOExceptionpublic void write(char cbuf) throws IOExceptionpublic void write(String str) throws IOException /将字符串写入输出流public Writer append(CharSeque
19、nce csq) throws IOException public Writer append(char c) throws IOException public abstract void flush() throws IOException /将缓冲区内容写入输出流public abstract void close() throws IOException ,Java程序设计实用教程(第3版),9.3.2 文件字符流,FileReader类 public class FileReader extends InputStreamReader public FileReader(Strin
20、g fileName) throws FileNotFoundException /构造方法public FileReader(File file) throws FileNotFoundException ,Java程序设计实用教程(第3版),2. FileWriter类,public class FileWriter extends OutputStreamWriter public FileWriter(String fileName) throws IOException /构造方法public FileWriter(String fileName, boolean append) t
21、hrows IOExceptionpublic FileWriter(File file) throws IOExceptionpublic FileWriter(File file, boolean append) throws IOException ,Java程序设计实用教程(第3版),9.3.3 缓冲字符流,BufferedReader类 public class BufferedReader extends Reader public BufferedReader(Reader in) /构造方法public String readLine() throws IOException
22、/读取一行字符串,输入流结束时返回null BufferedWriter类 public class BufferedWriter extends Writer public BufferedWriter(Writer out) /构造方法public BufferedWriter(Writer out, int sz) /sz指定字符缓冲区长度public void newLine() throws IOException /写入一个换行符 【例9.6】 将Fibonacci序列值写入文本文件。,Java程序设计实用教程(第3版),9.4 文件操作,9.4.1 文件操作类 9.4.2 文件过
23、滤器接口 9.4.3 文件对话框组件 9.4.4 随机存取文件类,Java程序设计实用教程(第3版),9.4.1 文件操作类,File类的构造方法 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
24、= new File(“.“,“); /创建一个目录文件对象,表示当前目录 File dir = new File(“C:“,“);,Java程序设计实用教程(第3版),2. File类提供的方法,访问文件对象方法 public String getName() /返回文件名,不包含路径名 public String getPath() /返回相对路径名,包含文件名 public String getAbsolutePath() /返回绝对路径名,包含文件名 public String getParent() /返回父文件对象的路径名 public File getParentFile() /
25、返回父文件对象 获得或设置文件属性 文件操作方法 目录操作方法 【例9.7】当前目录及子目录的文件列表 。,Java程序设计实用教程(第3版),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(FilenameFilt
26、er filter) /过滤显示文件清单 public File listFiles(FilenameFilter filter) public File listFiles(FileFilter filter) 【例9.8】 带过滤器的文件名列表。,Java程序设计实用教程(第3版),9.4.3 文件对话框组件,public class JFileChooser extends JComponent implements Accessible public static final int APPROVE_OPTION = 0; /单击“打开”或“保存”按钮public static fin
27、al int CANCEL_OPTION = 1; /单击“撤消”按钮public static final int ERROR_OPTION = -1; /出错public JFileChooser() public JFileChooser(String currentDirectoryPath) /初始路径public JFileChooser(File currentDirectory) public void setFileFilter(FileFilter filter) /设置文件过滤器public int showOpenDialog(Component parent) thr
28、ows HeadlessException/显示打开文件对话框public int showSaveDialog(Component parent) throws HeadlessException/显示保存文件对话框public File getSelectedFile() /返回选中文件 ,Java程序设计实用教程(第3版),2. JFileChooser的文件过滤器,public abstract class FileFilter extends Object public abstract boolean accept(File f)/过滤操作,f指定待过滤文件public abstr
29、act String getDescription() /文件类型描述字符串 【例9.9】 文件管理器和文本文件编辑器。 【例9.10】 画图并保存为JPG图像文件。,Java程序设计实用教程(第3版),9.4.4 随机存取文件类,public class RandomAccessFile extends Object implements DataOutput, DataInput, Closeable public RandomAccessFile(String name, String mode) throws FileNotFoundExceptionpublic RandomAcce
30、ssFile(File file, String mode) throws FileNotFoundExceptionpublic final int readInt() throws IOException /读一个整数类型值,当读到文件尾时,抛出EOFException异常public final void writeInt(int v) throws IOException /写入一个整型值public long length() throws IOException /返回文件长度public long getFilePointer() throws IOException /获取文件
31、指针位置public void seek(long pos) throws IOException /设置文件指针位置public void close() throws IOException /关闭文件 【例9.11】 在文件中添加不重复数据。,Java程序设计实用教程(第3版),实验9 输入/输出流与文件操作,目的:使用流和文件操作。 要求:掌握各种字节流类和字符流类的功能和使用方法,掌握文件操作的基本方法。 重点:理解流在文件操作中的作用,熟悉对文件操作的File类、文件过滤器、文件对话框和RandomAccessFile随机存取文件类。 难点:如何选择使用哪种字节流或字符流,掌握程序设计方法,而不是死记硬背。 操作系统的文件组织方式是树结构,递归算法。,