程序設(shè)計(jì)第15章輸入輸出流和文件操作ppt課件
第十五章 輸入輸出流與文件操作,目 錄,重點(diǎn)與難點(diǎn)點(diǎn)撥,輸入輸出流的分類,目錄和文件管理,文件和隨機(jī)訪問,其他常用的流,綜合案例,字符流,字節(jié)流,經(jīng)典練習(xí)題,本章知識重點(diǎn),輸入輸出流的分類,java.io包中流的體系結(jié)構(gòu),目錄和文件管理涉及到的類,輸入輸出流的概念,本章知識難點(diǎn),目錄和文件管理涉及到的類,流輸入及輸出的一般過程,輸入輸出流的分類,Java 流的概念 Java使用流(stream)來執(zhí)行輸入輸出(I/O)的功能,流是一 種數(shù)據(jù)的源頭和目的之間的通信途徑 標(biāo)準(zhǔn)輸入輸出 Java系統(tǒng)事先定義好兩個(gè)流對象,分別與系統(tǒng)的標(biāo)準(zhǔn)輸入 和標(biāo)準(zhǔn)輸出相聯(lián)系,它們是System. in和System.out System是Java中一個(gè)功能很強(qiáng)大的類,利用它可以獲得很 多Java運(yùn)行時(shí)的系統(tǒng)信息。,【例15.1】,輸出流(程序?qū)懗鰯?shù)據(jù)),輸入流(程序讀入數(shù)據(jù)),Java流類體系結(jié)構(gòu)1,Java流類體系結(jié)構(gòu)2,Java流類體系結(jié)構(gòu)3,Java流類體系結(jié)構(gòu)4,Java流的概念,輸入輸出流的分類,目錄和文件管理,文件名的處理,File類,文件或目錄的生成,文件屬性測試,普通文件信息和工具,目錄操作,public File(String path):如果path是實(shí)際存在的路徑,則該File對象表示的是目錄;如果path是文件名,則該File對象表示的是文件。 public File(String path,String name):path是路徑名,name是文件名(不可為空)。 public File(File dir,String name):dir是路徑名,name是文件名。,String getName( ):得到一個(gè)文件的名稱(不包括路徑)。 String getPath( ):得到一個(gè)文件的路徑名。 String getAbsolutePath( ):得到一個(gè)文件的絕對路徑名。 String getParent( ):得到一個(gè)文件的上一級目錄名。 String renameTo(File newName):將當(dāng)前文件名更名為給定文件的完整路徑。,【例15.2】,boolean exists( ):測試當(dāng)前File對象所指示的文件或目錄是否存在,若存在,返回True。 boolean createNewFile():創(chuàng)建當(dāng)前文件。 boolean canWrite( ):測試當(dāng)前文件是否可寫。 boolean canRead( ):測試當(dāng)前文件是否可讀。 boolean isFile( ):測試當(dāng)前文件是否是文件(不是目錄)。 boolean isDirectory( ):測試當(dāng)前文件是否是目錄,若為目錄則返回True。,【例15.3】,long lastModified( ):得到文件最近一次修改的時(shí)間。 long length( ):得到文件的長度,以字節(jié)為單位,若不存在,返回0。 boolean delete( ):刪除File對象代表的文件或目錄,目錄需為空。刪除成功,返回True。,boolean mkdir():生成一個(gè)由該對象指定的路徑(新目錄),若成功,返回True。 boolean mkdirs():生成一個(gè)新的目錄,包含子目錄。若成功,返回true。 boolean renameTo(File newName):將當(dāng)前File對象所代表的路徑名改為newName所代表的路徑名。若成功,返回true。 String list():列出當(dāng)前目錄下的文件。 File listFiles():得到該對象所代表的目錄下的File對象數(shù)組。 String toString():得到抽象路徑表示法。,【例15.4】,File類的應(yīng)用,【例15.5】,【例15.6】,字節(jié)流,順序讀/寫文件(FileInputStream與FileOutputStream),FileInputStream類從磁盤文件讀取數(shù)據(jù)。常用的構(gòu)造方法有: FileInputStream(String name):打開文件name用來讀取數(shù)據(jù)。 如:FileInputStream f =new FileInputStream(“c:/test.txt“); FileInputStream(File file):打開文件file用來讀取數(shù)據(jù)。 如:File f=new File(“c:/test.txt“); FileInputStream f1=new FileinputStream(f); 將FileDescriptor對象作為其參數(shù)。 如:FileDescriptor() fd=new FileDescriptor(); FileinputStream f2=new FileInputstream(fd);,FileOutputStream類創(chuàng)建文件(如果文件不存在),并將數(shù)據(jù)寫入文件。FileOutputStream類常用的構(gòu)造方法有: FileOutputStream(String name):打開文件name用來寫入數(shù)據(jù)。 如:FileOutputStream f=new FileOutputStream (“c:/test.txt“); FileOutputStream(File file):打開文件file用來寫入數(shù)據(jù)。 如:File f =new File(“c:/test.txt“); FileOutputStream f1=new FileOutputStream (f); FileOutputStream(String name,Boolean append):打開文件name用來寫入數(shù)據(jù),若append為true,則寫入的數(shù)據(jù)會(huì)加到原有文件后面,否則,覆蓋原有的文件。 如:FileOutputStream f =new FileOutputStream(“c:/test.txt“,true); 將FileDescriptor對象作為其參數(shù)。 FileDescriptor() fd =new FileDescriptor(); FileOutputStream f =new FileOutputStream(fd);,【例15.7】,字節(jié)流,字節(jié)流,ByteArrayInputStream 將字節(jié)數(shù)組用作源,并在該數(shù)組中執(zhí)行讀操作 它有兩種構(gòu)造方法。第一種構(gòu)造方法將字節(jié)數(shù)組作為參數(shù)。 ByteArrayInputStream(byte buffer):生成一個(gè)字節(jié)數(shù)組的輸入流,并指定一個(gè)字節(jié)數(shù)組buffer為此輸入流的流緩沖區(qū)。 如:ByteArrayInputStream b =new ByteArrayInputStream(buf); 另外一種構(gòu)造方法有助于從指定的字節(jié)數(shù)組來創(chuàng)建ByteArrayInputStream。 ByteArrayinputStream b =new ByteArrayinputStream(buf,off,len); 其中off 是要讀取的第一個(gè)字節(jié)的偏移,len 是要讀取數(shù)組的字節(jié)數(shù);,ByteArrayOutputStream有2種構(gòu)造方法 ByteArrayOutputStream():生成一個(gè)字節(jié)數(shù)組的輸出流,其緩沖區(qū)的默認(rèn)初始大小為32字節(jié),若有需要,緩沖區(qū)的大小會(huì)隨之增加。 如:ByteArrayOutPutStream b=new ByteArrayOutputStream(); ByteArrayOutputStream(int size):創(chuàng)建32個(gè)自己的緩沖器用于儲存數(shù)據(jù),但分配size字節(jié)的初始大小給此緩沖區(qū)。 如:ByteArrayOutputStream b1=new ByteArrayOutputStream(size);創(chuàng)建大小為size的緩沖器,ByteArrayOutputStream的一些常用方法: int size():返回此流緩沖區(qū)的大小。 byte toByteArray():生成一個(gè)新的字節(jié)數(shù)組,并將流的內(nèi)容復(fù)制到此字節(jié)數(shù)組。 String toString():將流的內(nèi)容轉(zhuǎn)換為String對象。,【例15.8】,字節(jié)流,緩沖區(qū)流BufferedInputStream和BufferedOutputStream,BufferedInputStream類的構(gòu)造方法和方法: BufferedInputStream(InputStream in):構(gòu)造一個(gè)BufferedInputStream。 BufferedInputStream(InputStream in, int size):構(gòu)造一個(gè)具有給定的緩沖區(qū)大小的BufferedInputStream。 int available():得到可以從這個(gè)輸入流讀取的字節(jié)數(shù)。 void close():關(guān)閉流。 void mark(int readlimit):在這個(gè)輸入流的當(dāng)前位置做標(biāo)記。 boolean markSupported():檢查這個(gè)輸入流是否支持mark和reset方法。 int read():讀取數(shù)據(jù)的下一個(gè)字節(jié)。 int read(byte b, int off, int len):從這個(gè)字節(jié)輸入流的給定偏移量處開始讀取字節(jié),存儲到給定的字節(jié)數(shù)組。 void reset():將緩沖區(qū)重新設(shè)置到加標(biāo)記的位置。 long skip(long n):跳過n個(gè)字節(jié)的數(shù)據(jù)。,BufferedOutputStream類的構(gòu)造方法和方法: BufferedOutputStream(OutputStream out):構(gòu)造一個(gè)BufferedOutputStream。 BufferedOutputStream(OutputStream out, int size):構(gòu)造一個(gè)具有給定的緩沖區(qū)大小的BufferedOutputStream。 void flush():刷新這個(gè)流。 void write(byte b, int off, int len):將給定的字節(jié)數(shù)組寫到這個(gè)緩沖輸出流。 void write(int b):將給定的字節(jié)寫到這個(gè)緩沖輸出流。,【例15.9】,字符流,字符流,InputStreamReader和OutputStreamWriter,InputStreamReader類的構(gòu)造方法和方法: InputStreamReader(InputStream in):構(gòu)造一個(gè)InputStreamReader。 InputStreamReader(InputStream in, String enc):使用命名的字符編碼構(gòu)造一個(gè)InputStreamReader。 void close():關(guān)閉流。 String getEncoding():得到字符編碼的名稱。 int read():讀取一個(gè)字符。 int read(char cbuf, int off, int len):將字符讀到數(shù)組中。 boolean ready():如果這個(gè)流已準(zhǔn)備好,返回True。,OutputStreamWriter類的構(gòu)造方法和方法: OutputStreamWriter(OutputStream out):構(gòu)造一個(gè)OutputStreamWriter。 OutputStreamWriter(OutputStream out, String enc):使用命名的字符編碼構(gòu)造一個(gè)OutputStreamWriter。 void close():關(guān)閉流。 void flush():刷新流。 String getEncoding():得到這個(gè)流使用的字符編碼的名稱。 void write(char cbuf, int off, int len):寫字符數(shù)組的一部分。 void write(int c):寫一個(gè)字符。 void write(String str, int off, int len):寫一個(gè)字符串的一部分。,【例15.10】,字符流,FileReader,FileReader(File file):構(gòu)造一個(gè)FileReader。 FileReader(FileDescriptor fd):從一個(gè)文件描述符構(gòu)造一個(gè)FileReader。 FileReader(String filename):從一個(gè)文件名構(gòu)造一個(gè)FileReader。,【例15.11】,字符流,FileWriter,FileWriter(File file):從File對象構(gòu)造一個(gè)FileWriter。 FileWriter(FileDescriptor fd):從文件描述符構(gòu)造一個(gè)FileWriter。 FileWriter(String filename):從文件名構(gòu)造一個(gè)FileWriter。 FileWriter(String filename, boolean append):構(gòu)造一進(jìn)行附加的FileWriter。,【例15.12】,字符流,BufferedReader和BufferedWriter,這兩個(gè)類對應(yīng)的流使用了緩沖,能大大提高輸入輸出的效率。這兩個(gè)也是過濾器流,常用來對InputStreamReader和OutputStreamWriter進(jìn)行處理。,【例15.13】,字符流,CharArrayReader和CharArrayWriter,CharArrayReader類的構(gòu)造方法和方法如下: CharArrayReader(char buf):從給定的字符數(shù)組構(gòu)造一個(gè)CharArrayReader。 CharArrayReader(char buf, int offset, int length):同上。 void close():關(guān)閉流。 void mark(int readAheadLimit):在流中的當(dāng)前位置加標(biāo)記。 boolean markSupported():如果這個(gè)流支持mark操作,那么返回True。 int read():讀取一個(gè)字符。 int read(char b, int off, int len):將字符讀入數(shù)組的一部分。 boolean ready():檢查這個(gè)流是否已經(jīng)準(zhǔn)備好被讀取。 void reset():將流重設(shè)到最近的標(biāo)記。 long skip(long n):跳過n個(gè)字符。,CharArrayWriter類的構(gòu)造方法和方法如下: CharArrayWriter():構(gòu)造一個(gè)CharArrayWriter。 CharArrayWriter(int initialSize):構(gòu)造一個(gè)具有給定初始大小的CharArrayWriter。 void close():關(guān)閉流。 void flush():刷新流。 void reset():重設(shè)流。 int size():得到緩沖區(qū)的當(dāng)前大小。 char toCharArray():得到輸入數(shù)據(jù)的副本。 String toString():將輸入數(shù)據(jù)轉(zhuǎn)換為字符串。 void write(char c, int off, int len):將字符寫到緩沖區(qū)中。 void write(int c):將一個(gè)字符寫到緩沖區(qū)中。 void write(String str, int off, int len):將字符串的一部分寫到緩沖區(qū)中。 void writeTo(Writer out):將緩沖區(qū)的內(nèi)容寫到另一個(gè)字符流中。,【例15.14】,文件的隨機(jī)訪問,RandomAccessFile(File file, String mode):構(gòu)造一個(gè)隨機(jī)訪問文件流,file為被訪問的文件對象,mode是用來指定存取的模式,mode可以為r(讀)、w(寫)或rw(讀寫)。 RandomAccessFile(String name,String mode):構(gòu)造一個(gè)隨機(jī)訪問文件流,以便訪問由字符串name指定名字的文件,mode參數(shù)使用同上,boolean readBoolean() byte readByte() char readChar() double readDouble() float readFloat() int readInt() long readLong() short readShort() String readLine(),void writeByte(byte b) void writeBytes(String s) void writeChar(char c) void writeChars(String s) void writeDouble(double d) void writeFloat(float f) void writeInt(int i) void writeLong(long l) void writeShort(short s),void seek(long pos):將文件指針移到pos(不可為負(fù))的位置,相對于文件初始位置值(初始值為0)。 long getFilePointer():得到目前文件指針的位置(相對于文件初始位置)。 long length():得到文件的長度。 int skipBytes( int n ):使文件指針向前移動(dòng)指定的n個(gè)字節(jié),【例15.15】,其他常用的流,管道流,ZIP文件流,DataInputStream和DataOutputStream,對象流,綜合案例,【例15.16】下面的代碼實(shí)現(xiàn)了一個(gè)簡單的文件編輯器,import java.awt.*; import java.awt.event.*; import java.io.*; public class FileEdit extends WindowAdapter implements ActionListener,TextListener Frame f; TextArea ta1; Panel p1; TextField tf1; Button b1,b2,b3; FileDialog fd; File file1=null; public static void main(String args) (new FileEdit().display(); ,綜合案例(續(xù)),public void display() f = new Frame(“FileEdit“); f.setSize(680,400); f.setLocation(200,140); f.setBackground(Color.lightGray); f.addWindowListener(this); tf1 = new TextField(); tf1.setEnabled(false); tf1.setFont(new Font(“Dialog“,0,20); /設(shè)置文本行的初始字體 f.add(tf1,“North“); ta1 = new TextArea(); ta1.setFont(new Font(“Dialog“,0,20); /設(shè)置文本區(qū)的初始字體 f.add(ta1); ta1.addTextListener(this); /注冊文本區(qū)的事件監(jiān)聽程序 p1 = new Panel(); p1.setLayout(new FlowLayout(FlowLayout.LEFT);,綜合案例(續(xù)),b1 = new Button(“Open“); b2 = new Button(“Save“); b3 = new Button(“Save As“); p1.add(b1); p1.add(b2); p1.add(b3); b2.setEnabled(false); b3.setEnabled(false); b1.addActionListener(this); /注冊按鈕的事件監(jiān)聽程序 b2.addActionListener(this); b3.addActionListener(this); f.add(p1,“South“); f.setVisible(true); public void textValueChanged(TextEvent e) /實(shí)現(xiàn)TextListener接口中的方法,對文本區(qū)操作時(shí)觸發(fā) b2.setEnabled(true); b3.setEnabled(true); ,綜合案例(續(xù)),public void actionPerformed(ActionEvent e) if (e.getSource()=b1) /單擊打開按鈕時(shí) fd = new FileDialog(f,“Open“,FileDialog.LOAD); fd.setVisible(true); /創(chuàng)建并顯示打開文件對話框 if (fd.getDirectory()!=null) ,綜合案例(續(xù)),if (e.getSource()=b2)|(e.getSource()=b3) /單擊保存按鈕時(shí) if(e.getSource()=b3)|(e.getSource()=b2) ,綜合案例(續(xù)),else save(file1); public void save(File file1) try /將文本區(qū)內(nèi)容寫入字符輸出流 FileWriter fw = new FileWriter(file1); fw.write(ta1.getText(); fw.close(); b2.setEnabled(false); b3.setEnabled(false); catch (IOException ioe) System.out.println(ioe); public void windowClosing(WindowEvent e) System.exit(0); ,綜合案例(續(xù)),程序運(yùn)行結(jié)果,簡答練習(xí)題,利用輸入輸出流編寫程序,實(shí)現(xiàn)文件拷貝的功能。,編寫程序,實(shí)現(xiàn)在屏幕上顯示文本文件的功能。,有哪些常用的字節(jié)流和字符流,他們的主要區(qū)別是什么?,對字節(jié)流和字符流進(jìn)行讀寫操作的一般步驟是什么?,File類有哪些構(gòu)造方法和常用方法?,編寫程序,從鍵盤輸入一串字符,從屏幕輸出并將其存入a.txt文件中。,【例15.1】標(biāo)準(zhǔn)輸入輸出舉例,標(biāo)準(zhǔn)輸入輸出,輸入輸出流的分類,import java.io.*; public class IODemo public static void main(String args) throws IOException int b; int count=0; while(b=System.in.read()!=-1)count+;System.out.print(char)b); System.out.println(); System.out.println(“program end“); ,程序運(yùn)行如下: 輸入:a,b,c,d 輸出:a,b,c,d 輸入:Z 輸出: program end,【例15.2】對Test.txt及其上一級目錄的File類對象進(jìn)行操作,目錄和文件管理,File類,import java.io.*; public class fileTest /創(chuàng)建一個(gè)文件 public static void main(String args) File f=new File(“parentfileTest.txt“); File f1=new File(“newfileTest.txt“); trySystem.out.println(f.getParent(); System.out.println(f.getName(); System.out.println(f1.getPath(); System.out.println(f1.getAbsolutePath();catch(Exception e)e.printStackTrace(); ,程序運(yùn)行結(jié)果,【例15.3】建立 test.txt 文件對象,判斷是否存在,如果不存在就創(chuàng)建之,import java.io.*; public class CreateNewFile public static void main(String args) File f=new File(“test.txt“); try if(!f.exists() f.createNewFile(); else System.out.println(“exists“); catch(Exception e) e.printStackTrace(); ,程序運(yùn)行結(jié)果,目錄和文件管理,File類,【例15.4】創(chuàng)建文件夾Dir以及文件夾dir/cdir。,目錄和文件管理,File類,import java.io.*; public class CreateDir public static void main(String args) File f=new File(“test.txt“); File f1=new File(“Dir“); File f2=new File(“dir/cdir“); File f3=new File(“newTest.txt“); try f.renameTo(f3);/把test.txt改名為newTest.txt f1.mkdir(); /創(chuàng)建目錄Dir f2.mkdirs(); /創(chuàng)建目錄dir及其子目錄cdir catch(Exception e)e.printStackTrace(); ,程序運(yùn)行結(jié)果,【例15.5】使用File類的方法獲取文件file.txt的屬性信息,目錄和文件管理,File類的應(yīng)用,import java.io.*; public class file public static void main(String args) File fl = new File(“file.txt“); System.out.println(“The file is exist? “+fl.exists(); System.out.println(“The file can write? “+fl.canWrite(); System.out.println(“The file can read? “+fl.canRead(); System.out.println(“The file is a file? “+fl.isFile(); System.out.println(“The file is a directory? “+fl.isDirectory(); System.out.println(“The file's name is: “+fl.getName(); System.out.println(“The file's all path is: “ + fl.getAbsolutePath(); System.out.println(“The file's length is “+fl.length(); ,程序運(yùn)行結(jié)果,【例15.6】列出Dir目錄下的所有文件和目錄(String list( ),最后修改時(shí)間;若為目錄則在其后面標(biāo)出,若為文件,則在其后面標(biāo)出文件長度(提示:方法long lastModified()能夠返回自1970.1.1起 到最后修改時(shí)間之間的秒數(shù)),import java.io.*; import java.util.*; public class testDir public static void main(String args) File f=new File(“Dir“); String listAll=null; File temp=null; try listAll=f.list(); for(int i=0;it“); else System.out.print(temp.length()+“t“); System.out.println(new Date(temp.lastModified(); catch(Exception e)e.printStackTrace(); ,目錄和文件管理,File類的應(yīng)用,程序運(yùn)行結(jié)果,字節(jié)流,【例15.7】將FileIO.java復(fù)制為FileExam.java.bak,import java.io.*; public class FileIO public static void main(String args) FileInputStream inFile=null; FileOutputStream outFile=null; tryinFile=new FileInputStream(“FileIO.java“); outFile=new FileOutputStream(“FileExam.java.bak“); int date; while(date=inFile.read()!=-1)outFile.write(date); catch(FileNotFoundException e)System.out.println(e.getMessage(); catch(IOException e)System.out.println(e.getMessage(); finallyif(inFile!=null)tryinFile.close();catch(IOException e) if(outFile!=null)tryoutFile.close();catch(IOException e) ,程序運(yùn)行結(jié)果,【解題分析】以下問題的求解過程可分解如下: 先打開文件FileExam.java 用read()將其內(nèi)容逐字節(jié)讀取出來(如果返回值為-1,則表明已到達(dá)文件尾端) 再用write()將讀出的字節(jié)逐一寫入另一個(gè)文件FileExam.java.bak中 若文件無法打開(例如FileExam.java不存在)或無法生成(FileExam.java.bak),則拋出FileNotFoundException異常,若讀寫出錯(cuò),則拋出IOException異常。 最后,在finally中關(guān)閉文件。,【例15.8】程序讀入文件ByteIO.java,將其內(nèi)容寫入內(nèi)存中(一個(gè)字節(jié)數(shù)組),接著轉(zhuǎn)換為String對象,并將該String對象內(nèi)的令牌解析出來,字節(jié)流,import java.io.*; import java.util.*; public class ByteIO public static void main(String args) tryFile inFile=new File(“FileIO.java“); FileInputStream inData=new FileInputStream(inFile); ByteArrayOutputStream dataArray=new ByteArrayOutputStream(); int data; while(data=inData.read()!=-1)dataArray.write(data); inData.close(); String dataStr=dataArray.toString(); StringTokenizer tokens=new StringTokenizer(dataStr); while(tokens.hasMoreTokens()System.out.println(tokens.nextToken(); catch(IOException e)System.out.println(e.getMessage(); ,程序運(yùn)行結(jié)果,【例15.9】文件拷貝的緩沖改進(jìn),字節(jié)流,/文件拷貝的緩沖改進(jìn) import java.io.*; public class Copy public static void main(String args) BufferedInputStream bis=null; BufferedOutputStream bos=null; byte buf=new byte100; try bis=new BufferedInputStream(new FileInputStream(“test.txt“); bos=new BufferedOutputStream(new FileOutputStream(“testcopy.txt“); int len=0; while( true ) len=bis.read(buf); if(len=0) break; bos.write(buf,0,len); bos.flush();/緩沖區(qū)只有滿時(shí)才會(huì)將數(shù)據(jù)輸出到輸出流,用flush()將未滿的緩沖區(qū)中數(shù)據(jù)強(qiáng)制輸出 catch(Exception e)e.printStackTrace(); finally if(bis != null) try bis.close(); catch(Exception e) e.printStackTrace(); if(bos!= null) try bos.close(); catch(Exception e) e.printStackTrace(); ,程序運(yùn)行結(jié)果,【例15.10】利用InputStreamReader從鍵盤接受輸入,再將輸入的字符顯示出來,字符流,import java.io.*; class inputstreamreader public static void main(String args) try int character; InputStreamReader instreamread = new InputStreamReader(System.in); /InputStreamReader以字符形式讀取輸入 while (character = instreamread.read() != -1) System.out.print(char) character); catch (IOException e) System.out.print(“Bye”); ,程序運(yùn)行結(jié)果如下: 輸入:a,b,c,d 輸出:a,b,c,d 輸入:1,2,3,4 輸出:1,2,3,4 輸入:Z 輸出:Bye,【例15.11】下例中打開一個(gè)文件file.txt(內(nèi)容為:Hello from file),將文件的內(nèi)容讀到緩沖區(qū),然后顯示數(shù)據(jù),字符流,import java.io.*; public class fileread public static void main(String args) throws Exception FileReader fileread = new FileReader(“file.txt“);/打開文件 char data = new char1024; int charsread = fileread.read(data);/讀入 System.out.println(new String(data,0,charsread);/顯示 fileread.close();/關(guān)閉文件流 ,程序運(yùn)行結(jié)果,字符流,【例15.12】下例中,分別采用三種方式:逐字符地寫數(shù)據(jù)、一次寫入所有數(shù)據(jù)、分批寫數(shù)據(jù),使用類FileWriter,import java.io.*; public class filewrite public static void main(String args) throws Exception char data='T','h','i','s',' ','i','s',' ','a',' ','s','t','r','i','n','g',' ','o','f',' ','t','e','x','t','.' FileWriter filewriter1=new FileWriter(“file1.txt“); for(int loop_index=0;loop_indexdata.length;loop_index+)filewriter1.write(dataloop_index); FileWriter filewriter2=new FileWriter(“file2.txt“); filewriter2.write(data); FileWriter filewriter3=new FileWriter(“file3.txt“); filewriter3.write(data,5,10); filewriter1.close(); filewriter2.close(); filewriter3.close(); ,程序執(zhí)行后: file1.txt和file2.txt的內(nèi)容為:This is a string of text。 file3.txt的內(nèi)容為:is a strin。,字符流,【例15.13】從鍵盤接受輸入并回顯,import java.io.*; public class Echotest public static void main(String args) BufferedReader in =new BufferedReader(new InputStreamReader(System.in); String s; System.out.print(“please enter a string:“); try while(s = in.readLine().length() != 0) System.out.println(“輸入是:“+s); catch(IOException e) e.printStackTrace(); ,程序運(yùn)行結(jié)果,字符流,【例15.14】下例演示CharArrayReader類的作用,該例從字符數(shù)組中逐個(gè)讀取字符并顯示,chararrayreader.java import java.io.*; public class chararrayreader public static void main(String args) throws IOException char data = 'T','h','i','s',' ','i','s',' ','a', ' ','s', 't','r','i','n','g',' ','o','f',' ','t','e','x','t','.' CharArrayReader chararrayreader = new CharArrayReader(data); int character; while(character = chararrayreader.read() != -1) System.out.print(char)character); ,程序運(yùn)行結(jié)果為: This is a string of text.,文件的隨機(jī)訪問,【例15.15】把若干個(gè)32位整數(shù)寫到一個(gè)名為test.txt的文件中,利用seek()方法,以相反的順序讀取這些數(shù)據(jù),import java.io.*; public class RandomFile public static void main(String args) RandomAccessFile raf=null; int data=12,31,56,23,27,1,43,65,4,99; try raf=new RandomAccessFile(“test.txt“,“rw“); for(int i=0;i=0;i-) raf.seek(i*4); System.out.println(raf.readInt(); catch(Exception e)e.getMessage(); finally if(raf!=null) tryraf.close();catch(Exception e)e.getMessage(); ,程序運(yùn)行結(jié)果,再 見,謝謝你的配合!,