輸入與輸出教育課件_第1頁
輸入與輸出教育課件_第2頁
輸入與輸出教育課件_第3頁
輸入與輸出教育課件_第4頁
輸入與輸出教育課件_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第八章 輸入與輸出概念Java I/O類Java I/O操作標(biāo)準(zhǔn)輸入/輸出文件讀寫操作目錄管理隨機訪問文件概念數(shù)據(jù)流:一組有順序的有起點和終點的字節(jié)集合。以流(stream)的方式對數(shù)據(jù)進行操作數(shù)據(jù)源程序讀出數(shù) 據(jù)流目的程序?qū)懭霐?shù) 據(jù)流 I/O來源 控制臺(console)打印/讀入 文件(file)讀/寫 網(wǎng)絡(luò)接口(TCP/UDP端口)讀/寫概念讀/寫流的一般流程讀(Reading)open a stream /打開讀出流while more information /判斷 read information /讀close the stream /關(guān)閉流寫(Writing)open a st

2、ream /打開寫入流while more information /判斷 write information /寫close the stream /關(guān)閉流概念兩種流的定義(讀取信息的基本數(shù)據(jù)單位)字節(jié)流(byte stream): 一個字節(jié)(8-bit)一個字節(jié)讀/寫字符流(character stream):一個字符一個字符讀/寫eg “ j a v a 語 言” 以字節(jié)流的方式讀: 讀8次,8個字節(jié) 以字符流的方式讀: 讀6次,6個字符Java I/O類字節(jié)流的讀/寫操作(來自JDK1.0)java.io.InputStream (抽象類)public abstract int rea

3、d()public int read(byte b)public int read(byte b, int offset, int length)到達(dá)流的終點,無數(shù)據(jù)讀出則返回-1java.io.OutputStream (抽象類)public abstract void write(int b)public void write(byte b)public void write(byte b, int offset, int length) 所有的讀/寫函數(shù)都拋出java.io.IOExceptionJava I/O類字符流的讀/寫操作(來自JDK1.1)java.io.Reader (抽象

4、類)public int read()public int read(char cbuf)publc abstract int read(char cbuf, int offset, int length)到達(dá)流的終點,無數(shù)據(jù)讀出則返回-1java.io.Writer (抽象類)public void write(int c)public void write(char cbuf)public void write(char cbuf, int offset, int length)所有的讀/寫函數(shù)都拋出java.io.IOExceptionJava I/O類I/O流的層次關(guān)系class ja

5、va.io.InputStream的子類class java.io.ByteArrayInputStreamclass java.io.FileInputStreamclass java.io.FilterInputStreamclass java.io.BufferedInputStreamclass java.io.DataInputStream class java.io.LineNumberInputStreamclass java.io.PushbackInputStreamclass java.io.ObjectInputStream class java.io.PipedInpu

6、tStreamclass java.io.SequenceInputStreamclass java.io.StringBufferInputStream Java I/O類I/O流的層次關(guān)系class java.io.OutputStream的子類class java.io.ByteArrayOutputStreamclass java.io.FileOutputStreamclass java.io.FilterOutputStreamclass java.io.BufferedOutputStreamclass java.io.DataOutputStream class java.io

7、.PrintStreamclass java.io.ObjectOutputStreamclass java.io.PipedOutputStream Java I/O類I/O流的層次關(guān)系class java.io.Reader的子類class java.io.BufferedReaderclass java.io.LineNumberReaderclass java.io.CharArrayReaderclass java.io.FilterReader class java.io.PushbackReaderclass java.io.InputStreamReaderclass java

8、.io.FileReaderclass java.io.PipedReaderclass java.io.StringReader Java I/O類I/O流的層次關(guān)系class java.io.Writer的子類class java.io.BufferedWriterclass java.io.CharArrayWriterclass java.io.FilterWriterclass java.io.OutputStreamWriter class java.io.FileWriterclass java.io.PipedWriterclass java.io.PrintWritercla

9、ss java.io.StringWriter Java I/O類I/O流的分類 (12個功能類)I/O類型所用到的類描述文件FileReader/FileWriterFileInputStream/FileOutputStream文件流(讀/寫文件)緩沖BufferedReader/BufferedWriterBufferedInputStreamBufferedOutputStream提高讀/寫效率打印PrintWriter PrintStream (System.out.println()提供打印內(nèi)存CharArrayReader/CharArrayWriterByteArrayInpu

10、tStreamByteArrayOutputStreamStringReader/StringWriterStringBufferInputStream讀/寫內(nèi)存中字節(jié)/字符數(shù)組Java I/O類I/O流的分類 (12個功能類)I/O類型所用到的類描述字節(jié)流和字符流的轉(zhuǎn)換InputStreamReaderOutputStreamWriter將字節(jié)轉(zhuǎn)為字符流輸入/將字符流轉(zhuǎn)為字節(jié)流輸出管道pipePipedReader/PipedWriterPipedInputStream/PipedOutputStream將一個線程的輸出作為另一個線程的輸入連接ConcatenationSequenceInp

11、utStream多個輸入流連接為一個輸入流對象串行化ObjectInputStreamObjectOutputStreamObject SerializationJava I/O類I/O流的分類 (12個功能類)I/O類型所用到的類描述基本數(shù)據(jù)轉(zhuǎn)化DataInputStreamDataOutputStreamJAVA基本數(shù)據(jù)類型的讀/寫計數(shù)LineNumberReaderLineNumberInputStream讀操作時記錄行數(shù)Peeking AheadPushbackReaderPushbackInputStream可回退緩存(pushback buffer)過濾FilterReader/F

12、ilterWriterFilterInputStream/FilterOutputStream在讀/寫操作時對數(shù)據(jù)進行過濾標(biāo)準(zhǔn)輸入/輸出System.in System.out System.err 1 System.in.read() 2 print(參數(shù)), println(參數(shù))class Test public static void main(String args) System.out.println(“Hello World!”);import java.io.IOException;class Test public static void main(String args)

13、 throws IOException byte b = new byte10;System.out.println(Received number= + System.in.read(b);C:java TestAReceived number=3C:【示例8-1】IOExample.Javaimport Java.io.IOException;class IOExample public static void main(String args) throws IOExceptionchar a;System.out.print(Please input a char: );a=(char

14、)System.in.read();System.out.println(The char is: +a);程序運行結(jié)果: Please input a char:(鍵入任意一個字符(C),回車)輸出:The number is: C8.3 常用的流類文件管理File類File類包含許多用于執(zhí)行文件常規(guī)操作的方法??梢栽L問指定文件的所有屬性,還可以刪除,創(chuàng)建,更名指定的文件或目錄。java.io.File類: 文件和目錄的路徑名路徑名(pathname)UNIX平臺上絕對路徑的前綴“/”,相對路徑無前綴,例“/etc/inetd.conf”、“inetd.conf”Windows平臺,絕對路徑

15、名的前綴由“盤符:”組成,或共享名前綴“”,然后是主機名和共享名,相對路徑名無盤符,例“c:windowsnotepad.exe”、“192.168.1.10Test.java” 構(gòu)造方法public File(String pathname)public File(String parent, String child)public File(File parent, String child)parent通常表示一個目錄, child則表示一個目錄或文件文件管理File類常用方法public String getAbsolutePath()public boolean canWrite()

16、/canRead()public boolean renameTo(File dest)public boolean delete()public boolean exists()public String getName() public String getParent()public boolean isDirectory() public boolean isFile()public String list()public String list(FilenameFilter filter)public boolean mkdir()public URL toURL()文件管理File

17、類方法舉例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);import java.io.File;import java.io.FilenameFilter;public class DirList public static void main(String args)

18、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; DirFilter(String key) this.key = key; public boolean accept(File dir, String name) String f = new File(name).getNam

19、e();return f.indexOf(key) != -1; java.util.FilenameFilter 接口 public boolean accept(File dir, String name); /是否指定的文件應(yīng)包含在文件列表中public String getName() in java.io.File/獲得文件或目錄名文件讀寫操作文件讀/寫流程打開文件流條件判斷讀出/寫入關(guān)閉文件流兩種類型文件FileInputStream/FileOutputStream (字節(jié)流)FileReader/FileWriter (字符流)字節(jié)流構(gòu)造方法public FileInputSt

20、ream(String name) throws FileNotFoundExceptionpublic FileInputStream(File file) throws FileNotFoundExceptionpublic FileOutputStream(File file) throws FileNotFoundExceptionpublic FileOutputStream(File file, boolean append) throws FileNotFoundException /是否向已存在的文件后添加public FileOutputStream(String name)

21、 throws FileNotFoundExceptionpublic FileOutputStream(String name, boolean append) throws FileNotFoundException文件讀寫操作文件讀寫操作2.字節(jié)流方法public int read()throws IOExceptionpublic int read(byte b)throws IOExceptionpublic int read(byte b,int offset,int len)throws IOExceptionpublic void close()throws IOExcepti

22、on public void write(int b) throws IOExceptionpublic void write (byte b)throws IOExceptionpublic void write (byte b,int offset,int len) throws IOException典型的讀文件程序import java.io.IOException;import java.io.FileInputStream;public class FileInputDemo public static void main(String args )throws IOExcepti

23、on FileInputStream file=new FileInputStream(args 0) ; int c; while(c=file.read()!=-1) System.out.print(char)c); file.close(); import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class CopyBytesDemo1 public static void main(String args)

24、 throws IOException File inputFile = new File(args0); File outputFile = new File(args1); FileInputStream in = new FileInputStream(inputFile); FileOutputStream out = new FileOutputStream(outputFile); int c; while (c = in.read() != -1) out.write(c); in.close(); out.close(); import java.io.*;public cla

25、ss c8_7 public static void main(String args) char c; int c1; File filePath=new File(temp); if(!filePath.exists() filePath.mkdir(); File fl=new File(filePath,d1.txt); try FileOutputStream fout=new FileOutputStream(fl); System.out.println(請輸入字符,輸入結(jié)束按#:); while(c=(char)System.in.read()!=#) fout.write(c

26、); fout.close(); System.out.println(n打印從磁盤讀入的數(shù)據(jù)); FileInputStream fin=new FileInputStream(fl); while(c1=fin.read()!=-1) System.out.print(char)c1); fin.close(); catch(FileNotFoundException e) System.err.println(e); catch(IOException e) System.err.println(e); 運行結(jié)果如下: 請輸入字符,輸入結(jié)束按 abcd# 打印從磁盤讀入的數(shù)據(jù) abcd#

27、 【示例8-2】FileOutputDemo.Javaimport java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class FileOutputDemo public static void main(String args) throws IOException File fileSource = new File(output.txt);Fil

28、e fileTarget = new File(intput.txt);FileOutputStream target = new FileOutputStream(fileTarget);FileInputStream source = new FileInputStream(fileSource);int c;while (c=source.read()!= -1)target.write(c);target.close();source.close();文件讀寫操作字符流構(gòu)造方法public FileReader(File file) throws FileNotFoundExcepti

29、onpublic FileReader(String fileName) throws FileNotFoundExceptionpublic File(String pathname)public FileWriter(File file) throws IOExceptionpublic FileWriter(File file, boolean append) throws IOExceptionpublic FileWriter(String fileName) throws IOExceptionpublic FileWriter(String fileName, boolean a

30、ppend) throws IOExceptionimport java.io.*;public class Copy public static void main(String args) throws IOException File inputFile = new File(“original.txt); File outputFile = new File(“result.txt); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int c; while

31、(c = in.read() != -1) out.write(c); in.close(); out.close(); FileReader in = new FileReader(“original.txt);FileWriter out = new FileWriter(“result.txt);public int read () throws IOExceptionpublic int read (char cbuf) throws IOExceptionpublic int read (char cbuf, int off, int len) throws IOExceptionp

32、ublic void write (int b) throws IOExceptionpublic void write (char cbuf) throws IOExceptionpublic void write (char cbuf, int off, int len) throws IOExceptionDataInputStream和DataOutputStream概述java.io.DataInputStream類public DataInputStream(InputStream in)public final boolean readBoolean()public final

33、byte readByte()public final char readChar()public final int readInt()java.io.DataOutputStream類public DataOutputStream(OutputStream out)public final void writeBoolean(boolean v)public final void writeByte(int v)public final void writeChar(int v)public final void writeInt(int v)DataOutputStream out =

34、new DataOutputStream(new FileOutputStream(invoice1.txt);double prices = 19.99, 9.99;int units= 12, 8;String descs = Java 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

35、.close();19.99 12 Java T-shirt9.99 8 Java Mug DataInputStream in = new DataInputStream( new FileInputStream(invoice1.txt);double 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

36、 = in.readChar()!= n) desc.append(chr);System.out.println(Youve ordered + unit + units of + desc + at $ + price); total = total + unit * price; catch (EOFException e) System.out.println(For a TOTAL of: $ + total);in.close();用于跟蹤中間流的類PushbackInputStream構(gòu)造方法:PushbackInputStream(InputStream in)Pushback

37、InputStream(InputStream in, int size)代表方法:Void unread(int n) 回退一個字節(jié)BufferedInputStream/BufferedOutputStream構(gòu)造方法public BufferedInputStream(InputStream in) 2048 bytespublic BufferedInputStream(InputStream in, int size)public BufferedOutputStream(OutputStream out) 512 bytespublic BufferedOutputStream(O

38、utputStream out, int size)public BufferedReader(Reader in) 8192 bytespublic BufferedReader(Reader in, int sz)public BufferedWriter(Writer out) 8192 bytepublic BufferedWriter(Writer out, int sz) String filename = “test.txt”; FileInputStream fis = new FileInputStream(filename); int count = 0; int c; w

39、hile (c = fis.read() != -1) if (c = A) count+; fis.close(); System.out.println(count); String filename = “test.txt”; FileInputStream fis = new FileInputStream(filename); BufferedInputStream bis = new BufferedInputStream(fis); int count = 0; int c; while (c = bis.read() != -1) if (c = A) count+; fis.

40、close(); System.out.println(count);BufferedInputStream/BufferedOutputStream數(shù)據(jù)的讀寫隨機訪問文件隨機訪問文件(Random Access File)java.io.RandomAccessFile類讀寫操作在同一個類中完成,須在構(gòu)造對象時指定參數(shù)通過移動文件指針(file pointer)在文件的指定位置進行讀寫操作構(gòu)造方法public RandomAccessFile(String name, String mode) throws FileNotFoundExceptionpublic RandomAccessFi

41、le(File file, String mode) throws FileNotFoundExceptionmode: “r”, “rw”隨機訪問文件方法public int read()public int read(byte b)public int read(byte b, int off, int len)public final boolean readBoolean()/readByte()/readChar()/readShort()/readInt()/readDouble()/readFloat()public final String readLine()public v

42、oid write(int b)public void write(byte b)public void write(byte b, int off, int len)public final void writeBoolean()/writeByte()/writeChar()/writeShort()/writeInt()/writeDouble()/writeFloat()隨機訪問文件方法public void seek(long pos) throws IOExceptionpublic int skipBytes(int n) throws IOExceptionpublic lon

43、g getFilePointer() throws IOExceptionpublic long length() throws IOExceptionvoid setLength(long newLength)import java.io.RandomAccessFile;import java.io.IOException;import java.io.FileNotFoundException;public class RAFDemo public static void main(String args) try RandomAccessFile rf = new RandomAcce

44、ssFile(test.dat, rw); for(int i = 0; i 10; i+)rf.writeDouble(i*1.48); rf.close(); rf = new RandomAccessFile(test.dat, rw); rf.seek(5*8); rf.writeDouble(47.0001); rf.close(); rf = new RandomAccessFile(test.dat, r); for(int i = 0; i 10; i+)System.out.println(Value + i + : + rf.readDouble(); rf.close();catch(FileNotFoundException e) Syste

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論