已閱讀5頁,還剩195頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
輸入輸出流,什么是“流”?,流(stream)是一個(gè)信息的邏輯實(shí)體,它通過Java輸入/輸出系統(tǒng)與物理設(shè)備相連。 從源到目的地的字節(jié)的有序序列 流是指數(shù)據(jù)傳輸時(shí)的形態(tài) 盡管與“流”鏈接的物理設(shè)備不盡相同,但是所有流的行為具有同樣的方式。 最大特點(diǎn)是數(shù)據(jù)的獲取和發(fā)送均按照順序進(jìn)行。,各種“流”,數(shù)據(jù)流:是指在計(jì)算機(jī)的輸入輸出之間運(yùn)動(dòng)的數(shù)據(jù)序列。 輸入輸出是相對程序來說的,程序扮演兩個(gè)角色:源和目的。 輸入流:代表從外設(shè)流入程序的數(shù)據(jù)序列; 輸出流:代表從程序流向外設(shè)的數(shù)據(jù)序列。 字節(jié)流:在輸入輸出過程中以字節(jié)為單位。 字符流:在輸入輸出過程中以字符為單位。 緩沖流:通過建立輸入輸出緩沖區(qū),提高數(shù)據(jù)輸入輸出的效率,程序,文件,程序,文件,輸入流,輸出流,源,輸入流通過使用read( )方法 從輸入流讀出源中的數(shù)據(jù),目的地,輸出流通過使用write( )方法把數(shù) 據(jù)寫入輸出流并傳送到目的地,輸入流示意圖,輸出流示意圖,標(biāo)準(zhǔn)輸入輸出,System.in InputStream 從鍵盤讀入數(shù)據(jù) System.out PrintStream public void print ( 輸出參數(shù) ) public void println ( 輸出參數(shù) ) System.err PrintStream 用于向屏幕輸出錯(cuò)誤信息,java.io包,java.io包中提供了各種各樣的輸入輸出流類,它們都是Object類的直接子類,每一個(gè)流類代表一種特定的輸入或輸出流。 根據(jù)流相對于程序的另一個(gè)端點(diǎn)的不同,分為節(jié)點(diǎn)流和過濾流 節(jié)點(diǎn)流:以特定源,例如磁盤文件、內(nèi)存某區(qū)域或線程之間的管道為端點(diǎn)構(gòu)造的輸入/輸出流 過濾流:以其他已經(jīng)存在的流為端點(diǎn)構(gòu)造的輸入/輸出流,基本流類的繼承關(guān)系,基本輸入流(InputStream)和基本輸出流(OutputStream)是處理以8位字節(jié)為基本單位的字節(jié)流類,讀寫以字節(jié)為單位進(jìn)行 在Java中,用InputStream類來描述所有輸入流的抽象概念,InputStream的常用方法 public abstract int read( ) 從輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)。返回 0 到 255 范圍內(nèi)的 int 字節(jié)值。 public int read(byte b) 從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲在緩沖區(qū)數(shù)組 b 中。以整數(shù)形式返回實(shí)際讀取的字節(jié)數(shù)。如果到達(dá)流末尾,則返回值 -1。 public int read(byte b, int off, int len) 將輸入流中最多 len 個(gè)數(shù)據(jù)字節(jié)讀入 byte 數(shù)組。以整數(shù)形式返回實(shí)際讀取的字節(jié)數(shù)。,public long skip(long n) 跳過和丟棄此輸入流中數(shù)據(jù)的 n 個(gè)字節(jié)。返回實(shí)際跳過的字節(jié)數(shù) public int available( ) 返回可用的未阻塞的字節(jié)數(shù) public void close() 關(guān)閉輸入流 public void mark(int readlimit) 在輸入流的當(dāng)前位置做標(biāo)記,從當(dāng)前位置最多還能讀取readlimit個(gè)字符,OutputStream的常用方法 public abstract void write(int b) 將指定的字節(jié)寫入此輸出流。 public void write(byte b) 將 b.length 個(gè)字節(jié)從指定的 byte 數(shù)組寫入此輸出流。 public void write(byte b, int off, int len) 將指定 byte 數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此輸出流。 public void close() 關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。 public void flush() 刷新此輸出流并強(qiáng)制寫出所有緩沖的輸出字節(jié)。,public abstract void write(int b) throws IOException 只能寫入低字節(jié),java.io.ByteArrayInputStream,java.io.FileInputStream,java.io. FilterInputStream,java.io.ObjectInputStream,java.io.PipedInputStream,java.io.SequenceInputStream,java.io.StringBufferInputStream,javax.sound.sampled.AudioInputStream,java.io. InputStream,java.io. FilterInputStream,回壓輸入流,緩沖輸入流,數(shù)據(jù)輸入流,java.io. FilterOutputStream,java.io.BufferedOutputStream,java.util.zip.CheckedOutputStream,javax.crypto. CipherOutputStream,java.io. DataOutputStream,java.util.zip.DeflaterOutputStream,java.security.DigestOutputStream,java.util.zip.InflaterOutputStream,java.io. PrintStream,格式化輸出流,緩沖輸出流,數(shù)據(jù)輸出流,ByteArrayInputStream、ByteArrayOutputStream ByteArrayInputStream 包含一個(gè)內(nèi)部緩沖區(qū),該緩沖區(qū)存儲被讀取的字節(jié)。 在ByteArrayOutputStream中,數(shù)據(jù)被寫入一個(gè) byte 數(shù)組。緩沖區(qū)會隨著數(shù)據(jù)的不斷寫入而自動(dòng)增長 FileInputStream、FileOutputStream FileInputStream 從文件系統(tǒng)中的某個(gè)文件中獲取輸入字節(jié)。 FileOutputStream是用于將數(shù)據(jù)寫入 File 或 FileDescriptor 的輸出流。,FilterInputStream、FilterOutputStream FilterInputStream 包含其他一些輸入流,它將這些流用作其基本數(shù)據(jù)源,它可以直接傳輸數(shù)據(jù)或提供一些額外的功能。 FilterOutputStream位于已存在的輸出流(基礎(chǔ) 輸出流)之上,它們將已存在的輸出流作為其基本數(shù)據(jù)接收器,但可能直接傳輸數(shù)據(jù)或提供一些額外的功能。,ObjectInputStream、ObjectOutputStream ObjectInputStream 對以前使用 ObjectOutputStream 寫入的基本數(shù)據(jù)和對象進(jìn)行反序列化。 ObjectOutputStream 和 ObjectInputStream 分別與 FileOutputStream 和 FileInputStream 一起使用時(shí),可以為應(yīng)用程序提供對對象圖形的持久存儲。 ObjectOutputStream 將 Java 對象的基本數(shù)據(jù)類型和圖形寫入 OutputStream 只能將支持 java.io.Serializable 接口的對象寫入流中。,PipedInputStream和PipedOutputStream 管道輸入流應(yīng)該連接到管道輸出流 管道輸入流提供要寫入管道輸出流的所有數(shù)據(jù)字節(jié) 通常,數(shù)據(jù)由某個(gè)線程從 PipedInputStream 對象讀 取,并由其他線程將其寫入到相應(yīng)的PipedOutputStream。 BufferedInputStream和BufferedOutputStream 創(chuàng)建 BufferedInputStream 時(shí)即創(chuàng)建了一個(gè)內(nèi)部緩沖區(qū)數(shù)組。 通過設(shè)置BufferedOutputStream ,應(yīng)用程序就可以將各個(gè)字節(jié)寫入底層輸出流中,而不必針對每次字節(jié)寫入調(diào)用底層系統(tǒng) 關(guān)閉BufferedOutputStream時(shí),如果緩存未滿,就強(qiáng)迫將數(shù)據(jù)壓入輸出流中,StringBufferInputStream StringBufferInputStream類允許應(yīng)用創(chuàng)建一個(gè)輸入流,從某一串中讀取流的字節(jié)數(shù)據(jù)。 SequenceInputStream SequenceInputStream 表示其他輸入流的邏輯串聯(lián)。 它從輸入流的有序集合開始,并從第一個(gè)輸入流開始讀取,直到到達(dá)文件末尾,接著從第二個(gè)輸入流讀取,依次類推,直到到達(dá)包含的最后一個(gè)輸入流的文件末尾為止。 LineNumberInputStream 提供跟蹤當(dāng)前行號的附加功能。 行是以回車符 (r)、換行符 (n) 或回車符后面緊跟換行符結(jié)尾的字節(jié)序列。,PushbackInputStream PushbackInputStream 為另一個(gè)輸入流添加性能,即“推回 (push back)”或“取消讀取 (unread)”一個(gè)字節(jié)的能力。 在代碼片段可以很方便地讀取由特定字節(jié)值分隔的不定數(shù)量的數(shù)據(jù)字節(jié)時(shí),這很有用;在讀取終止字節(jié)后,代碼片段可以“取消讀取”該字節(jié),這樣,輸入流上的下一個(gè)讀取操作將會重新讀取被推回的字節(jié)。,public void unread(int b),推回一個(gè)字節(jié)。,DataInputStream、DataOutputStream 數(shù)據(jù)輸入流允許應(yīng)用程序以與機(jī)器無關(guān)方式從底層輸入流中讀取基本 Java 數(shù)據(jù)類型。 數(shù)據(jù)輸出流允許應(yīng)用程序以適當(dāng)方式將基本 Java 數(shù)據(jù)類型寫入輸出流中。 ProgressMonitorInputStream 在讀取文件時(shí)會彈出一個(gè)顯示讀取速度的進(jìn)度條 PrintStream PrintStream 為其他輸出流添加了功能,使它們能夠方便地打印各種數(shù)據(jù)值表示形式。 與其他輸出流不同,PrintStream 永遠(yuǎn)不會拋出 IOException;而是,異常情況僅設(shè)置可通過 checkError 方法測試的內(nèi)部標(biāo)志。,標(biāo)準(zhǔn)輸入和輸出,在Java中,標(biāo)準(zhǔn)輸入是鍵盤,標(biāo)準(zhǔn)輸出是顯示器屏幕 System類管理標(biāo)準(zhǔn)輸入輸出流和錯(cuò)誤流。 類中申明了如下類變量: public static final InputStream in public static final PrintStream out public static final PrintStream err,System.in:從標(biāo)準(zhǔn)輸入獲取輸入(通常是鍵盤) System.in是InputStream類的對象,使用read()和skip(long n)方法讀取。 一直打開并準(zhǔn)備好提供輸入的數(shù)據(jù) System.out:把輸出送到缺省的顯示(通常是顯示器) System.out是PrintStream類的對象,使用print()和println()來輸出。 一直打開并準(zhǔn)備好接收輸出的數(shù)據(jù) System.err:把錯(cuò)誤信息送到缺省的顯示,標(biāo)準(zhǔn)輸入輸出示例:,import java.io.*; public class StandardIO public static void main(String args ) int ch; System.out.println(“請輸入一行字符“); try while(ch=System.in.read()!=r) System.out.write(ch); catch(IOException e) System.out.println(e.toString(); System.out.write(n); ,思考:程序結(jié)果?,import java.io.*; public class IOTest public static void main(String args) try byte bArray=new byte128; System.out.println(“Enter something:”); System.in.read(bArray); System.out.println(“You entered:”); System.out.println(bArray); catch(IOException ioe) System.out.println(ioe.toString(); ,結(jié)果:,原因:System.out.println(bArray)輸出的是數(shù)組的地址而不是字符 改進(jìn):將字符數(shù)組變換成字符串 before:System.out.println(bArray); now:String s=new String(bArray,0,bArray.Length); System.out.println(s);,byte buffer=new byte200; int d=0,count=0; try count=System.in.read(buffer); catch (Exception e) System.out.print(e); for (int i=0; icount; i+) System.out.print(char)bufferi); System.out.println(“Input ten char:”); for (int i=1; i=10; i+) try d=System.in.read(); System.out.println(char)d); catch (Exception e) System.out.print(e); ,如何判斷一個(gè)文件是否具有下列屬性 是否可讀? 是否可寫? 文件長度是多少? 文件是否存在? 文件的名稱是什么? 文件的絕對路徑是什么? 文件的父目錄是什么? 是文件夾還是文件? 是否隱藏? 最后修改的時(shí)間為什么?,File dir=new File(“E:myjavakafei“); File f1=new File(“E:myjavakafei“,“CheckBoxExp.java“); System.out.println(f1.getName()+“可讀嗎?“+f1.canRead(); System.out.println(f1.getName()+“可寫嗎?“+f1.canWrite(); System.out.println(f1.getName()+“的長度為“+f1.length(); System.out.println(f1.getName()+“的絕對路徑為“+f1.getAbsolutePath(); System.out.println(f1.getName()+“是目錄嗎?“+f1.isDirectory(); System.out.println(dir.getName()+“是目錄嗎?“+dir.isDirectory(); System.out.println(f1.getName()+“是隱藏的嗎?“+f1.isHidden(); System.out.println(f1.getName()+“最后修改的時(shí)間為“+f1.lastModified(); System.out.println(f1.getName()+“的父目錄為“+f1.getParent();,File類,構(gòu)造方法 public File(String pathname) public File(String parent, String child) public File(File parent, String child) 獲取文件信息的方法 public String getName() public boolean canRead() public boolean canWrite() public boolean exists(),public long length() public String getAbsolutePath() public String getParent() public boolean isFile() public boolean isDirectory() public boolean isHidden() public long lastModified(),如何進(jìn)行對目錄的下列操作 如何創(chuàng)建一個(gè)目錄? 如何列出目錄中的所有文件? 如何列出目錄中滿足要求的文件?,目錄 創(chuàng)建目錄 public boolean mkdir() 列出目錄中的文件 public String list() public String list(FilenameFilter filter) public File listFiles() public File listFiles(FilenameFilter filter) FilenameFilter接口 boolean accept(File dir, String name),class FileAccept implements FilenameFilter String str=null; FileAccept(String s) str=“.“+s; public boolean accept(File dir, String name) return name.endsWith(str); ,File dir=new File(“E:myjavakafei“); FileAccept acceptCondition=new FileAccept(“java“); String fileName=dir.list(acceptCondition); for (int i=0; ifileName.length; i+) System.out.println(fileNamei); ,如何進(jìn)行對文件的下列操作? 如何創(chuàng)建一個(gè)文件? 如何刪除一個(gè)文件? 如何重命名文件? 如何運(yùn)行一個(gè)可執(zhí)行文件?,文件的創(chuàng)建與刪除 public boolean createNewFile( ) public boolean delete( ) 文件的重命名 public boolean renameTo(File dest) 運(yùn)行可執(zhí)行文件 可使用java.lang包中的Runtime類編譯、執(zhí)行、打開文件或執(zhí)行其它操作 Runtime類的方法 public static Runtime getRuntime( ) public Process exec(String command) 步驟: Runtime ec=Runtime.getRuntime( ); ec.exec();,若E:myjavakafei下無文件夾newdir存在,則創(chuàng)建新文件夾newdir 在E:myjavakafeinewdir下創(chuàng)建新文本文件newfile,并更名為newf 編譯并執(zhí)行當(dāng)前目錄下的文件ButtonLabelExp.java,File dir=new File(“E:myjavakafeinewdir“); if (!dir.exists() dir2.mkdir(); File file=new File(dir,“newfile.txt“); file.createNewFile(); File file2=new File(dir,“newf.txt“); if (file.renameTo(file2) System.out.println(“Rename successful!“); else System.out.println(“Rename failed!“); catch (Exception e) System.out.println(“Error occured!“+e); ,try Runtime ce=Runtime.getRuntime(); ce.exec(“javac ButtonLabelExp.java“); ce.exec(“java ButtonLabelExp“); catch (Exception e) System.out.println(e); ,如何以字節(jié)形式讀取一個(gè)文件并顯示在屏幕上? 如何將從鍵盤輸入的文本以字節(jié)形式保存到文件中?,hello.txt,程序,hello.txt,程序,例:讀取一個(gè)文件的內(nèi)容并顯示在屏幕上,byte fileContent=new byte20; int b; try File f=new File(“ButtonLabelExp.java“); FileInputStream in=new FileInputStream(f); while (b=in.read(fileContent,0,20)!=-1) String s=new String(fileContent,0,b); System.out.println(s); in.close(); catch (IOException e) System.out.println(“error occured in file read!“+e); ,例:從鍵盤輸入一行文本到文件中,byte buffer=new byte100; try File f=new File(“l(fā)ine.txt“); if (!f.exists() System.out.println(“Creating line.txt.“); f.createNewFile(); FileOutputStream out=new FileOutputStream(f); System.out.println(“please input a line of text:“); b=System.in.read(buffer); out.write(buffer,0,b); out.close(); catch (IOException e) System.out.println(“Error in write“+e); ,FileInputStream類,構(gòu)造方法 public FileInputStream(String name) throws FileNotFoundException public FileInputStream(File file) throws FileNotFoundException,創(chuàng)建磁盤文件的輸入流對象,創(chuàng)建FileInputStream對象時(shí),指定的文件應(yīng)當(dāng)是 存在和可讀的,打開一個(gè)到某文件的輸入流 try FileInputStream istream=new FileInputStream(“hello.txt”); catch (IOException e) System.out.println(“error occurred in file read!”); try File f=new File(“hello.txt”); FileInputStream stream=new FileInputStream(f); catch (IOException e) ,從輸入流中讀取字節(jié) public int read() throws IOException 返回字節(jié)值,若到達(dá)源的末尾則返回-1 public int read(byte b) throws IOException 將讀入的數(shù)據(jù)放在一個(gè)字節(jié)數(shù)組中,返回實(shí)際讀取的字節(jié)個(gè)數(shù),若到達(dá)源的末尾則返回-1 public int read(byte b, int off, int len) throws IOException 將讀入的數(shù)據(jù)放在一個(gè)字節(jié)數(shù)組中,off是首字節(jié)在數(shù)組中的存放位置,byte fileContent=new byte20; try while (b=in.read(fileContent,0,20)!=-1) String s=new String(fileContent,0,b); System.out.println(s); catch (IOException e) ,關(guān)閉流 需要釋放流所占用的系統(tǒng)資源 需要把流緩沖區(qū)的內(nèi)容沖洗掉 java會在程序結(jié)束時(shí)自動(dòng)關(guān)閉所有打開的流 對于過濾流,則把最頂層的流關(guān)閉,會自動(dòng)自頂向下關(guān)閉所有流 public void close( ) throws IOException,FileOutputStream類,構(gòu)造方法 public FileOutputStream(File file) throws FileNotFoundException public FileOutputStream(String name) throws FileNotFoundException public FileOutputStream(String name, boolean append),創(chuàng)建FileOutputStream對象時(shí),可以指定還不存在的 文件名,不能指定一個(gè)已被其他程序打開了的文件,常用方法 public void write(byte b) throws IOException 將指定字節(jié)數(shù)組寫入此文件輸出流。 public void write(byte b, int off, int len) throws IOException 將指定字節(jié)數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此文件輸出流。 public void write(int b) throws IOException 輸出指定的字節(jié) public void close( ) throws IOException 關(guān)閉此文件輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。 public void flush() throws IOException 刷新此輸出流并強(qiáng)制寫出所有緩沖的輸出字節(jié)。,try byte buffer=new byte100; FileOutputStream out=new FileOutputStream(f); b=System.in.read(buffer); out.write(buffer,0,b); out.close(); catch (IOException e) ,如何將各種基本數(shù)據(jù)類型的數(shù)據(jù)寫入文件中并依序讀出顯示在屏幕上?,try DataOutputStream dos=new DataOutputStream(new FileOutputStream(“4.txt”); dos.writeBoolean(true); dos.writeShort(12); dos.writeInt(100); dos.writeLong(123456); dos.writeFloat(3.1415926f); dos.writeDouble(987545321.12324); dos.writeChar(G); dos.writeUTF(“you are a teacher“); dos.close(); catch (FileNotFoundException fe) catch (IOException ioe) ,try DataInputStream dis=new DataInputStream(new FileInputStream(“4.txt”); System.out.println(dis.readBoolean(); System.out.println(dis.readShort(); System.out.println(dis.readInt(); System.out.println(dis.readLong(); System.out.println(dis.readFloat(); System.out.println(dis.readDouble(); System.out.println(dis.readChar(); System.out.println(dis.readUTF(); dis.close(); catch (FileNotFoundException fe) catch (IOException ioe) ,DataOutputStream類,將java基本數(shù)據(jù)類型的數(shù)據(jù)寫到一個(gè)低層的輸出流中,所寫數(shù)據(jù)的方式是可移植的 既可以向輸出流中寫入字節(jié),還可寫入基本數(shù)據(jù)類型 構(gòu)造方法 public DataOutputStream(OutputStream out) 常用方法 public final void writeBoolean(boolean v) throws IOException public final void writeByte(int v) throws IOException,public final void writeShort(int v) throws IOException public final void writeChar(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 writeBytes(String s) throws IOException public final void writeChars(String s) throws IOException public final void writeUTF(String str) throws IOException public void write(byte b, int off, int len) throws IOException public void write(int b) throws IOException public void write(byte b) throws IOException java.io.FilterOutputStream,try DataOutputStream dos=new DataOutputStream(new FileOutputStream(“4.txt”); dos.writeBoolean(true); dos.close( ); catch ( FileNotFoundException e ) catch (IOException ioe ) ,基本框架,DataInputStream類,應(yīng)用程序以與機(jī)器無關(guān)的方式從低層輸入流中讀取Java基本數(shù)據(jù)類型的數(shù)據(jù) 既可以讀取字節(jié),還可以讀取基本類型數(shù)據(jù)和文本行 構(gòu)造方法 public DataInputStream(InputStream in) 常用方法 public final boolean readBoolean() throws IOException public final String readLine() throws IOException public final byte readByte() throws IOException public final char readChar() 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 String readUTF() throws IOException public final int readUnsignedByte() throws IOException public final int readUnsignedShort() throws IOException public final int skipBytes(int n) throws IOException public final int read(byte b) throws IOException public final int read(byte b, int off, int len) throws IOException public int read() throws IOException java.io.FilterInputStream public final void readFully(byte b) throws IOException,為什么DataInputStream類中有一個(gè)readUTF方法,而沒有readChars和readBytes方法呢?,try DataInputStream dis=new DataInputStream(new FileInputStream(“4.txt”); System.out.println(dis. readBoolean( ) ); dis.close( ); catch ( FileNotFoundException e ) catch (IOException ioe ) ,基本框架,每一字節(jié)的讀寫都要涉及對磁盤的直接操作,如何減少對磁盤的讀寫次數(shù)以提高效率呢?,使用緩沖流,試比較采用緩沖和非緩沖策略向文件中寫入及從文件中讀出100000個(gè)double數(shù)的效率,緩沖流為I/O流增加了內(nèi)存緩沖區(qū),增加緩沖區(qū)有兩個(gè)基本目的: 允許Java程序一次不只操作一個(gè)字節(jié),提高了程序的性能 由于有了緩沖區(qū),使得在流上執(zhí)行skip、mark和reset方法都成為可能 這兩個(gè)類在自己的實(shí)例對象中創(chuàng)建緩沖區(qū),流緩沖區(qū)與底層緩沖區(qū)的區(qū)別 底層緩沖區(qū)讀寫數(shù)據(jù)是批量的 流緩沖區(qū)讀寫數(shù)據(jù)是單個(gè)的,緩沖流類,BufferedOutputStream public BufferedOutputStream(OutputStream out) 新建一個(gè)默認(rèn)大小的緩沖流。緩沖輸出流收集寫入的字符以避免每次都引起對設(shè)備的訪問。當(dāng)緩沖區(qū)滿或流被刷新時(shí),數(shù)據(jù)被寫入設(shè)備。 public void flush( ) throws IOException 刷新此緩沖的輸出流。這迫使所有緩沖的輸出字節(jié)被寫 到底層輸出流中。,public void write(byte b, int off, int len) throws IOException,public void write(int b) throws IOException,public BufferedOutputStream(OutputStream out, int size) public BufferedInputStream(InputStream in, int size),BufferedInputStream public BufferedInputStream(InputStream in) 新建一個(gè)默認(rèn)大小的緩沖流。緩沖的輸入流從一 個(gè)流中讀取字符,而不會每次都引起對設(shè)備的訪問。 當(dāng)緩沖區(qū)空時(shí),一個(gè)新的數(shù)據(jù)塊將被讀入緩沖區(qū)。,緩沖流把數(shù)據(jù)從原始流成塊讀入或把數(shù)據(jù)積累到一個(gè) 大數(shù)據(jù)塊后再成批寫出,通過減少系統(tǒng)資源的讀寫次 數(shù)來加快程序的執(zhí)行。,public int read(byte b, int off, int len) throws IOException,public int read() throws IOException,public BufferedInputStream(InputStream in, int size),基本框架,DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(“4.txt”); dos.close( );,DataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(“4.txt”); dis.close( );,如何以字符形式向文件寫入數(shù)據(jù)和從文件讀出數(shù)據(jù)?,程序,文件,FileWriter 對象,BufferedWriter 對象,程序,文件,FileReader 對象,BufferedReader 對象,字符輸入流,過濾器輸入流,緩沖輸入流,管道輸入流,字節(jié)數(shù)組輸入流,字符串輸入流,BufferedReader,LineNumberReader,FilterReader,PushbackReader,InputStreamReader,FileReader,行編號輸入流,回壓輸入流,文件輸入流,字符串輸出流,字節(jié)數(shù)組輸出流,格式化輸出流,管道輸出流,緩沖輸出流,過濾器輸出流,字符輸出流,文件輸出流,Writer中的方法 public void write(char cbuf) throws IOException public abstract void write(char cbuf, int off, int len) throws IOException public void write(String str) throws IOException public void write(String str, int off, int len) throws IOException public void write(int c) throws IOException,Reader中的方法 public int read() throws IOException public int read(char cbuf) throws IOException public abstract int read(char cbuf, int off, int len) throws IOException,FileReader和FileWriter 用來讀出和寫入字符文件的便捷類。 BufferedReader和BufferedWriter BufferedWriter將文本寫入字符輸出流,緩沖各個(gè)字符,從而提供單個(gè)字符、數(shù)組和字符串的高效寫入。 BufferedReader從字符輸入流中讀取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取。,InputStreamReader類 public InputStreamReader(InputStream in),InputStreamReader in=new InputStreamReader (System.in);,二進(jìn)制文件與文本文件的區(qū)別,在內(nèi)存中都以二進(jìn)制的形式存儲 要表示字符的字節(jié)是特殊的,不能是任意的 如果一個(gè)文本中的每個(gè)字節(jié)或每相鄰若干字節(jié)都可以表示成字符,就是文本文件 文本文件是二進(jìn)制文件的一種特例 如果一個(gè)文件專用于存儲文本字符,沒有包含字符以外的數(shù)據(jù),稱為文本文件,例:創(chuàng)建一個(gè)簡單的文本編輯工具,能在文本區(qū)中打開指定的文件,并能在指定文件中保存文本區(qū)中內(nèi)容,public class TextViewerExp extends JFrame implements ActionListener private JMenu fileMenu=new JMenu(“File“); private JMenuItem fileOpen=new JMenuItem(“Open“); private JMenuItem fileSave=new JMenuItem(“Save“); private JMenuItem fileExit=new JMenuItem(“Exit“); private JTextArea text=new JTextArea(); private JFileChooser fileDialog;,public TextViewerExp() super(“Text Viewer“); fileMenu.add(fileOpen); fileOpen.addActionListener(this); fileMenu.add(fileSave); fileSave.addActionListener(this); fileMenu.addSeparator(); fileMenu.add(fileExit); fileExit.addActionListener(this); JMenuBar menu=new JMenuBar(); menu.add(fileMenu); setJMenuBar(menu); setLayout(new BorderLayout(); add(new JScrollPane(text),BorderLayout.CENTER); setSize(400,400); setVisible(true); ,public void readFile(String file) text.setText(“); try BufferedReader in=new BufferedReader(new FileReader(file); String line; while (line=in.readLine()!=null) text.append(line+“n“); in.close(); text.setCaretPosition(0); catch (IOException ioe) System.err.println(ioe); ,pu
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度鞋類品牌跨界合作開發(fā)合同3篇
- 城市交通擁堵治理解決方案合同
- 聊城2025年山東聊城江北水城旅游度假區(qū)教育事業(yè)單位選聘教師6人筆試歷年參考題庫附帶答案詳解
- 2025年度網(wǎng)絡(luò)安全軟件采購合同范本3篇
- 泉州2025年福建南安市衛(wèi)生事業(yè)單位招聘編制內(nèi)衛(wèi)生類工作人員51人筆試歷年參考題庫附帶答案詳解
- 威海2025年山東威海市教育局直屬學(xué)校引進(jìn)急需緊缺人才73人筆試歷年參考題庫附帶答案詳解
- 嘉興2025年浙江嘉興市婦幼保健院招聘高層次人才(博士研究生)10人筆試歷年參考題庫附帶答案詳解
- 2025年度高速公路建設(shè)碎石采購合同匯編3篇
- 2024年超白透明浮法玻璃項(xiàng)目可行性研究報(bào)告
- 2025年新院基礎(chǔ)運(yùn)營費(fèi)綜合服務(wù)合同2篇
- 【譯林版】六年級英語(下冊)單詞默寫單
- 高中英語名詞性從句講解
- 計(jì)算機(jī)二級wps題庫及答案
- 整套課件:工業(yè)催化
- 爆破安全管理知識培訓(xùn)
- 旅游地理學(xué)教案
- 煤矸石綜合利用途徑課件
- 企業(yè)信息公示聯(lián)絡(luò)員備案申請表
- 衛(wèi)生部關(guān)于發(fā)布《綜合醫(yī)院組織編制原則試行草案》的通知((78)衛(wèi)醫(yī)字第1689號)
- 挑戰(zhàn)杯生命科學(xué)獲獎(jiǎng)作品范例
- 醫(yī)院崗位設(shè)置與人員編制標(biāo)準(zhǔn)
評論
0/150
提交評論