文件输入输出_第1页
文件输入输出_第2页
文件输入输出_第3页
文件输入输出_第4页
文件输入输出_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 Java语言程序设计 2 Java I/O操作 n概念 nJava I/O类 nJava I/O操作 n标准输入/输出 n文件读写操作 n目录管理 n随机访问文件 n文件属性 3 概念 nI/O来源 n控制台(console, 如DOS窗口)打印/读入 n文件(file)读/写 n网络接口(TCP/UDP端口)读/写 n针对数据的读写 n以流(stream)的方式对数据进行操作 数据源 程序 读出 数 据 流 目的 程序 写入 数 据 流 流的重要特性 n顺序读/写 nsequentially 4 概念 n读/写流的一般流程 n读(Reading) nopen a stream /打开读出

2、流 nwhile more information /判断 n read information /读 nclose the stream /关闭流 n写(Writing) nopen a stream /打开写入流 nwhile more information /判断 n write information /写 1.close the stream /关闭流 5 概念 n两种流的定义(读取信息的基本数据单位) n字节流(byte stream): 一个字节(8-bit)一个 字节读/写 n字符流(character stream):一个字符一个字 符读/写(具有特定字符编码的数据) j

3、a v a 语 言 6A 61 76 61 D3 EF D1 D4 以字节流的方式读: 读8次,8个字节 以字符流的方式读: 读6次,6个字符 6 Java I/O操作 n概念 nJava I/O类 nJava I/O操作 n标准输入/输出 n文件读写操作 n目录管理 n随机访问文件 n文件属性 7 Java I/O类 n字节流的读/写操作(来自JDK1.0) njava.io.InputStream (抽象类) npublic abstract int read() npublic int read(byte b) npublic int read(byte b, int offset, i

4、nt length) n到达流的终点,无数据读出则返回-1 njava.io.OutputStream (抽象类) npublic abstract void write(int b) npublic void write(byte b) npublic void write(byte b, int offset, int length) 1.所有的读/写函数都抛出java.io.IOException 8 Java I/O类 n字符流的读/写操作(来自JDK1.1) njava.io.Reader (抽象类) npublic int read() npublic int read(char

5、cbuf) npublc abstract int read(char cbuf, int offset, int length) n到达流的终点,无数据读出则返回-1 njava.io.Writer (抽象类) npublic void write(int c) npublic void write(char cbuf) npublic void write(char cbuf, int offset, int length) 1.所有的读/写函数都抛出java.io.IOException 9 Java I/O类 nI/O流的层次关系 nclass java.io.InputStream的

6、子类 nclass java.io.ByteArrayInputStream nclass java.io.FileInputStream nclass java.io.FilterInputStream nclass java.io.BufferedInputStream nclass java.io.DataInputStream nclass java.io.LineNumberInputStream nclass java.io.PushbackInputStream nclass java.io.ObjectInputStream nclass java.io.PipedInputS

7、tream nclass java.io.SequenceInputStream nclass java.io.StringBufferInputStream n 10 Java I/O类 nI/O流的层次关系 nclass java.io.OutputStream的子类 nclass java.io.ByteArrayOutputStream nclass java.io.FileOutputStream nclass java.io.FilterOutputStream nclass java.io.BufferedOutputStream nclass java.io.DataOutpu

8、tStream nclass java.io.PrintStream nclass java.io.ObjectOutputStream nclass java.io.PipedOutputStream n 11 Java I/O类 nI/O流的层次关系 nclass java.io.Reader的子类 nclass java.io.BufferedReader nclass java.io.LineNumberReader nclass java.io.CharArrayReader nclass java.io.FilterReader nclass java.io.PushbackRea

9、der nclass java.io.InputStreamReader nclass java.io.FileReader nclass java.io.PipedReader nclass java.io.StringReader n 12 Java I/O类 nI/O流的层次关系 nclass java.io.Writer的子类 nclass java.io.BufferedWriter nclass java.io.CharArrayWriter nclass java.io.FilterWriter nclass java.io.OutputStreamWriter nclass j

10、ava.io.FileWriter nclass java.io.PipedWriter nclass java.io.PrintWriter nclass java.io.StringWriter n 13 Java I/O类 nI/O流的分类 (12个功能类) I/O类型 所用到的类描述 文件FileReader/FileWriter FileInputStream/FileOutputStream 文件流(读/写文件) 缓冲BufferedReader/BufferedWriter BufferedInputStream BufferedOutputStream 提高读/写效率 打印Pr

11、intWriter PrintStream (System.out.println() 内存CharArrayReader/CharArrayWriter ByteArrayInputStream ByteArrayOutputStream StringReader/StringWriter StringBufferInputStream 读/写内存 14 Java I/O类 nI/O流的分类 (12个功能类) I/O类型 所用到的类描述 字节流和字符 流的转换 InputStreamReader OutputStreamWriter 将InputStream中读入 的字节转为字符/将字符 转

12、为字节写入 OutputStream 管道 pipe PipedReader/PipedWriter PipedInputStream/PipedOutputStream 文件流(读/写文件) 连接 Concatenation SequenceInputStream多个输入流连接为一个 输入流 对象串行化ObjectInputStream ObjectOutputStream Object Serialization 15 Java I/O类 nI/O流的分类 (12个功能类) I/O类型 所用到的类描述 基本数据转化DataInputStream DataOutputStream JAVA基

13、本数据类型的 读/写 计数LineNumberReader LineNumberInputStream 读操作时记录行数 Peeking Ahead PushbackReader PushbackInputStream 可回退缓存 (pushback buffer) 过滤FilterReader/FilterWriter FilterInputStream/FilterOutputStream 在读/写操作时对数据 进行过滤 16 Java I/O操作 n概念 nJava I/O类 nJava I/O操作 n标准输入/输出 n文件读写操作 n目录管理 n随机访问文件 n文件属性 17 Java

14、 I/O操作 n主要内容 n标准输入/输出 n控制台屏幕打印和键盘读入 n文件I/O操作 n文件读写 n如何提高文件读写效率 n流的包装(Wrap) n基本数据转换流 n目录管理 n随机访问文件(Random Access File) 1.文件属性 18 n输出: 控制台屏幕打印 class Test public static void main(String args) System.out.println(“Hello World!”); 标准输入/输出 19 n输入: 键盘读入 import java.io.IOException; class Test public static v

15、oid main(String args) throws IOException byte b = new byte10; System.out.println(Received number= + System.in.read(b); 标准输入/输出 C:java Test A Received number=3 C: 20 n文件读/写流程 n打开文件流 n条件判断 n读出/写入 n关闭文件流 n两种类型文件 nFileInputStream/FileOutputStream (字节流) 1.FileReader/FileWriter (字符流) 文件读写操作 21 n字节流构造方法 np

16、ublic FileInputStream(File file) throws FileNotFoundException npublic FileInputStream(String name) throws FileNotFoundException npublic File(String pathname) npublic FileOutputStream(File file) throws FileNotFoundException npublic FileOutputStream(File file, boolean append) throws FileNotFoundExcept

17、ion /是否向已存在的文件后添加 npublic FileOutputStream(String name) throws FileNotFoundException npublic FileOutputStream(String name, boolean append) throws FileNotFoundException 文件读写操作 22 n文件读写-实例1 文件读写操作 import java.io.*; public class CopyBytes public static void main(String args) throws IOException File inp

18、utFile = new File(“original.txt); File outputFile = new File(“result.txt); FileInputStream in = new FileInputStream(inputFile); FileOutputStream out = new FileOutputStream(outputFile); int c; while (c = in.read() != -1) out.write(c); in.close(); out.close(); public int read ()throws IOException publ

19、ic int read (byte b) throws IOException public int read (byte b, int off, int len) throws IOException FileInputStream in = new FileInputStream(“original.txt); FileOutputStream out = new FileOutputStream(“result.txt); public void write (int b) throws IOException public void write (byte b) throws IOEx

20、ception public void write (byte b, int off, int len) throws IOException 23 n字符流构造方法 npublic FileReader(File file) throws FileNotFoundException npublic FileReader(String fileName) throws FileNotFoundException npublic File(String pathname) npublic FileWriter(File file) throws IOException npublic FileW

21、riter(File file, boolean append) throws IOException npublic FileWriter(String fileName) throws IOException npublic FileWriter(String fileName, boolean append) throws IOException 文件读写操作 24 n文件读写-实例2 文件读写操作 import java.io.*; public class Copy public static void main(String args) throws IOException Fil

22、e inputFile = new File(“original.txt); File outputFile = new File(“result.txt); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int c; while (c = in.read() != -1) out.write(c); in.close(); out.close(); FileReader in = new FileReader(“original.txt); FileWriter

23、out = new FileWriter(“result.txt); public int read () throws IOException public int read (char cbuf) throws IOException public int read (char cbuf, int off, int len) throws IOException public void write (int b) throws IOException public void write (char cbuf) throws IOException public void write (ch

24、ar cbuf, int off, int len) throws IOException 25 n两类缓冲流 n针对字节流 njava.io.BufferedInputStream类 njava.io.BufferedOutputStream类 n针对字符流 njava.io.BufferedReader类 njava.io.BufferedWriter类 如何提高文件读写效率 26 n构造方法 npublic BufferedInputStream(InputStream in) 2048 bytes npublic BufferedInputStream(InputStream in,

25、int size) npublic BufferedOutputStream(OutputStream out) 512 bytes npublic BufferedOutputStream(OutputStream out, int size) npublic BufferedReader(Reader in) 8192 bytes npublic BufferedReader(Reader in, int sz) npublic BufferedWriter(Writer out) 8192 byte npublic BufferedWriter(Writer out, int sz) 如

26、何提高文件读写效率 27 String filename = “test.txt”; FileInputStream fis = new FileInputStream(filename); int count = 0; int c; while (c = fis.read() != -1) if (c = A) count+; fis.close(); System.out.println(count); n如何提高文件读写效率-实例1 如何提高文件读写效率 String filename = “test.txt”; FileInputStream fis = new FileInputSt

27、ream(filename); BufferedInputStream bis = new BufferedInputStream(fis); int count = 0; int c; while (c = bis.read() != -1) if (c = A) count+; fis.close(); System.out.println(count); FileInputStream fis = new FileInputStream(“test.txt”); int count = 0; final int BUFSIZE = 1024; byte buf = new byteBUF

28、SIZE; int len; while (len = fis.read(buf) != -1) for (int i = 0; i len; i+) if (bufi = A) count+; fis.close(); 28 String filename = “test.txt”; FileReader fr = new FileReader(filename); BufferedReader br = new BufferedReader(fr); int count = 0; while (br.readLine() != null) count+; br.close(); Syste

29、m.out.println(count); n如何提高文件读写效率-实例2 如何提高文件读写效率 29 n概述 流的包装(wrap) FileReader fr = new FileReader (filename); BufferedReader br = new BufferedReader (fr); BufferedReader br = new BufferedReader ( new FileReader(filename); PrintWriter out = new PrintWriter ( new BufferedWriter(new FileWriter(filename

30、); public String readLine() in java.io.BufferedReader public void println(String x) in java.io.PrintWriter n利用不同流的特点(方法) n寻找合适的方法完成特定的需求 n对已有的流进行再处理 30 n流的种类 n节点流 n直接对数据源进行读/写操作的流 n处理流 n对一个已有的流进行某种操作的流 流的包装(wrap) 31 n节点流 nFileInputStream, PipedInputStream, ByteArrayInputStream, StringBufferInputStre

31、am nFileOutputStream, PipedOutputStream, ByteArrayOutputStream nCharArrayReader, FileReader, PipedReader, StringReader nCharArrayWriter, FileWriter, PipedWriter, StringWriter 流的包装(wrap) 32 n处理流 nFilterOutputStream, DataOutputStream, BufferedOutputStream, PrintStream nFilterInputStream, LineNumberInp

32、utStream, DataInputStream, BufferedInputStream, PushbackInputStream nBufferedReader, LineNumberReader, InputStreamReader, FilterReader, PushBackReader nBufferedWriter, OutputStreamReader, FilterWriter, PrintWriter 流的包装(wrap) 33 n一个实例 njava.io.FileReader npublic FileReader(File file) throws FileNotFo

33、undException npublic FileReader(String fileName) throws FileNotFoundException njava.io.BufferedReader npublic BufferedReader(Reader in) 8192 bytes npublic BufferedReader(Reader in, int sz) n流的包装改变了流的行为 流的包装(wrap) 34 n流的包装(wrap)-实例1 流的包装(wrap) import java.io.*; public class Echo public static void ma

34、in(String args) throws IOException BufferedReader in = new BufferedReader( new InputStreamReader(System.in); String s; while(s = in.readLine().length() != 0) System.out.println(s); public static final InputStream in (java.lang.System) public InputStreamReader(InputStream in) public BufferedReader(Re

35、ader in) 程序如何结束(跳出while循环)? 35 n概述 njava.io.DataInputStream类 npublic DataInputStream(InputStream in) npublic final boolean readBoolean() npublic final byte readByte() npublic final char readChar() npublic final int readInt() njava.io.DataOutputStream类 npublic DataOutputStream(OutputStream out) npubl

36、ic final void writeBoolean(boolean v) npublic final void writeByte(int v) npublic final void writeChar(int v) npublic final void writeInt(int v) 基本数据转换流 36 DataOutputStream out = new DataOutputStream(new FileOutputStream(invoice1.txt); double prices = 19.99, 9.99; int units= 12, 8; String descs = Ja

37、va T-shirt, Java Mug; for (int i = 0; i prices.length; i +) out.writeDouble(pricesi); out.writeChar(t); out.writeInt(unitsi); out.writeChar(t); out.writeChars(descsi); out.writeChar(n); out.close(); n基本数据转换流-实例 基本数据转换流 DataInputStream in = new DataInputStream( new FileInputStream(invoice1.txt); doub

38、le total; try while (true) double price = in.readDouble(); in.readChar(); int unit = in.readInt(); in.readChar(); char chr; StringBuffer desc = new StringBuffer(20); while (chr = in.readChar()!= n) desc.append(chr); System.out.println(Youve ordered + unit + units of + desc + at $ + price); total = t

39、otal + unit * price; catch (EOFException e) System.out.println(For a TOTAL of: $ + total); in.close(); 19.99 12 Java T-shirt 9.99 8 Java Mug 37 n概述 njava.io.File类: 文件和目录的路径名 n构造方法 npublic File(String pathname) npublic File(String parent, String child) npublic File(File parent, String child) nparent通

40、常表示一个目录, child则表示一个目录或文件 n路径名(pathname) nUNIX平台上绝对路径的前缀“/”,相对路径无前缀,例 “/etc/inetd.conf”、“inetd.conf” nWindows平台,绝对路径名的前缀由“盘符:”组成;UNC 路 径名前缀为“”,然后是主机名和共享名,相对路径名无盘 符,例“c:windowsnotepad.exe”、“notepad.exe” 目录管理 38 n方法 npublic boolean canWrite()/canRead() npublic boolean exists() npublic boolean delete()

41、删除文件或目录,若删除目录, 要求该目录必须为空 npublic boolean createNewFile() 创建一个空文件,当 且仅当该文件不存在 npublic boolean isDirectory()/isFile()/isHidden() npublic long lastModified()/public boolean setLastModified(long time) npublic String list() 得到当前目录下的所有文件名和 目录名,若该File对象不是表示目录,则返回null npublic boolean mkdir()/mkdirs() 创建一个目录

42、 npublic boolean renameTo(File dest) npublic boolean setReadOnly() 目录管理 39 n目录管理方法举例 目录管理 import java.io.File; public class DirList public static void main(String args) File path = new File(.); String list = path.list(); for(int i = 0; i list.length; i+) System.out.println(listi); 40 n目录管理方法举例 目录管理

43、import java.io.File; import java.io.FilenameFilter; public class DirList public static void main(String args) File path = new File(.); String list = path.list(new DirFilter(args0); for (int i = 0; i list.length; i+) System.out.println(listi); class DirFilter implements FilenameFilter String key; Dir

44、Filter(String key) this.key = key; public boolean accept(File dir, String name) String f = new File(name).getName(); return f.indexOf(key) != -1; java.util.FilenameFilter 接口 public boolean accept(File dir, String name); /是否指定的文件应包含在文件列表中 public String getName() in java.io.File /获得文件或目录名,仅仅是最后的部分 41

45、n随机访问文件(Random Access File) njava.io.RandomAccessFile类 n读写操作在同一个类中完成,须在构造对象时指定 参数 n通过移动文件指针(file pointer)在文件的指定位置 进行读写操作 n构造方法 npublic RandomAccessFile(String name, String mode) throws FileNotFoundException npublic RandomAccessFile(File file, String mode) throws FileNotFoundException nmode: “r”, “rw

46、” 随机访问文件 42 n方法 npublic void seek(long pos) npublic int read() npublic int read(byte b) npublic int read(byte b, int off, int len) npublic final boolean readBoolean()/readByte()/readChar()/readShort()/ readInt()/readDouble()/readFloat() npublic final String readLine() npublic void write(int b) npubl

47、ic void write(byte b) npublic void write(byte b, int off, int len) npublic final void writeBoolean()/writeByte()/writeChar()/writeShor t()/writeInt()/writeDouble()/writeFloat() 随机访问文件 43 n随机访问文件(Random Access File)-实例 随机访问文件 RandomAccessFile rf = new RandomAccessFile(rtest.dat, rw); for(int i = 0; i

48、 10; i+) rf.writeDouble(i*1.414); rf.close(); rf = new RandomAccessFile(rtest.dat, rw); rf.seek(5*8); rf.writeDouble(47.0001); rf.close(); rf = new RandomAccessFile(rtest.dat, r); for(int i = 0; i 10; i+) System.out.println(Value + i + : + rf.readDouble(); rf.close(); 运行结果: Value 0: 0.0 Value 1: 1.4

49、14 Value 2: 2.828 Value 3: 4.242 Value 4: 5.656 Value 5: 47.0001 Value 6: 8.484 Value 7: 9.898 Value 8: 11.312 Value 9: 12.725999999999999 44 n文件的特性 n读和写的权限 n文件长度 n修改时间 n是否是目录 njava.io.File类 n设定文件属性 n查询文件属性 文件属性 45 文件属性 n获取文件路径 import java.io.*; class AttrDemo1 public static void main(String args) throws IOException File testfile = new File(. + File.separatorChar + testfile1); testfile.createNewFile(); System.out.printl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论