输入输出流-带仓库系统作业_第1页
输入输出流-带仓库系统作业_第2页
输入输出流-带仓库系统作业_第3页
输入输出流-带仓库系统作业_第4页
输入输出流-带仓库系统作业_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

输入输出流概述File(文件类)FileInputStreamFileOutputStreamFileReader和FileWriterRandomAccessFilePipedInputStream/PipedOutputStreamDateInputStream/DateOutputStreamObjectInputStream/ObjectOutputStreamPrintStream/PrintWriter输入输出流--带仓库系统作业第1页1.概述一个计算机最简单模型由以下三个管道组成:输入,处理,输出。JavaI/O流库提供大量流类(在包java.io中),其中,全部输入流类都是InputStream(抽象类)或抽象类Reader子类,而全部输出流类都是OutputStream(抽象类)或抽象类Writer子类

输入输出流--带仓库系统作业第2页2.文件(File类)File类不允许访问文件内容,没有可用于访问文件read()和write()方法.File类主要用于命名文件,查询文件属性和处理目录.

输入输出流--带仓库系统作业第3页2.1.创建文件对象结构方法:1.publicFile(Strings);(在Windows平台,分割符为“\”,在Linux/Unix上,为“/”,File提供参数:File.separator)2.publicFile(StringDirectory,Strings);

输入输出流--带仓库系统作业第4页2.2查询文件属性File类提供了几个方法,查询文件属性:文件是否存在文件是否读保护文件是否写保护文件是否是一个目录文件是否隐藏

输入输出流--带仓库系统作业第5页2.3查询文件属性Strings="e:"+File.separator+"Thread1.java";Filefile=newFile(s);Stringexists=file.exists()?"Yes":"No";StringcanRead=file.canRead()?"Yes":"No";StringcanWrite=file.canWrite()?"Yes":"No";StringisFile=file.isFile()?"Yes":"No";StringisHid=file.isHidden()?"Yes":"No";StringisDir=file.isDirectory()?"Yes":"No";StringisAbs=file.isAbsolute()?"Yes":"No";Attr.java输入输出流--带仓库系统作业第6页3.FileInputStreamFileInputStream典型地表示一种顺序访问文本文件。经过使用FileInputStream你可以访问文件一个字节、几个字节或整个文件。由InputStream派生类

结构方法:

FileInputStream(Stringname);//使用给定文件名创建一个FileInputStream对象

FileInputStream(Filefile);//使用File对象创建一个FileInputStream对象

输入输出流--带仓库系统作业第7页3.1使用FileInputStream读取文件使用结构方法来打开一个抵达该文件输入流:FileInputStreammyFileStream;myFileStream=newFileInputStream(“myfile.dat");或:FilemyFile;FileInputSteammyFileStream;myFile=newFile("myfile.dat");myFileStream=newFileInputStream(myFile);输入输出流--带仓库系统作业第8页3.2处理I/O异常必须使用catch块检测并处理I/O异常(IOException),如:try{FileInputStreamins=newFileInputStream(“myfile.dat");}catch(IOExceptione){//文件I/O错误

System.out.println(“Filereaderror:”+e);}输入输出流--带仓库系统作业第9页3.3从FileInputStream中读出read()组员函数:intread()//读取一个字节//抵达输入流末尾时,返回-1intread(byteb[])//把多个字节读到字节数组中//抵达输入流末尾时,返回-1intread(byteb[],intoff,intlen)

//off指定read方法把数据存放在字节数组b中什么地方。//len指定该方法将读取最大字节数。//抵达输入流末尾时,返回-1输入输出流--带仓库系统作业第10页3.4关闭FileInputStream两种方法关闭:显式关闭和隐式关闭,隐式关闭是自动垃圾回收时功能。显式关闭为:

myFileStream.close();

输入输出流--带仓库系统作业第11页

intb;bytebuffer[]=newbyte[2500];

try{Filef=newFile("E:\\lanhong\\","a.txt");FileInputStreamreadfile=newFileInputStream(f);b=readfile.read(buffer,0,2500);try{Stringstr=newString(buffer,0,b,"Default");System.out.println(str);}catch(UnsupportedEncodingExceptione){System.out.println("theencodingwasnotfound:"+e);}

}catch(IOExceptione){ System.out.println("FilereadError");}

Example20_1.java输入输出流--带仓库系统作业第12页4.FileOutputStreamFileOutputStream用于向一个文本文件写数据。由OutputStream派生类

输入输出流--带仓库系统作业第13页4.1打开FileOutputStream和打开输入流FileInputStream类似:FileOutputStreammyFileStream;myFileStream=newFileOutputStream(“file.txt");或:FilemyFile;FileOutputSteammyFileStream;myFile=newFile("file.txt");myFileStream=newFileOutputStream(myFile);

输入输出流--带仓库系统作业第14页4.2写入一个流

write()组员函数:

voidwrite(byteb[])//写b.length个字节到输出流

voidwrite(byteb[],intoff,intlen)//b是数据,off是数据起始偏移量,len是要输出字节数输入输出流--带仓库系统作业第15页publicstaticvoidmain(Stringargs[]){intb;bytebuffer[]=newbyte[100];try{

System.out.println("输入一行文本,并存入磁盘:");

b=System.in.read(buffer);//把从键盘输入字符存入buffer

FileOutputStreamwritefile=newFileOutputStream("line.txt");

writefile.write(buffer,0,b);//经过流把buffer写入到文件line.txt中}catch(IOExceptione){System.out.println("Error");}}

Example20_3.java输入输出流--带仓库系统作业第16页5.FileReader和FileWriter与FileInputStream和FileOutputStream等价读取器是FileReader类和FileWriter类。它们分别是Reader和Writer子类。结构方法分别是:

FileReader(Stringfilename);FileWriter(Stringfilename);如:FileReaderfile=newFileReader(“Student.txt”);不能按行读取或写入输入输出流--带仓库系统作业第17页5.1BufferedReaderFileReader类不能读取一行,Java提供了BufferedReader类。结构方法是:

BufferedReader(Readerin);读取文本行方法是:

readLine();如:BufferedReaderin=BufferedReader(newFileReader(“Student.txt”));

输入输出流--带仓库系统作业第18页P261,例4Example20_4TextAreatext;BufferedReaderin;Buttonbutton;

FileReaderfile;EWindow(){super("流读取");text=newTextArea(10,10);text.setBackground(Color.cyan);try{Filef=newFile("E:\\lanhong\\","a.txt");file=newFileReader(f);in=newBufferedReader(file);}catch(FileNotFoundExceptione){}catch(IOExceptione){}button=newButton("读取");

button.addActionListener(this);输入输出流--带仓库系统作业第19页setLayout(newBorderLayout());setSize(40,40);setVisible(true);add(text,"Center");add(button,"South");addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});}

publicvoidactionPerformed(ActionEvente){Strings;if(e.getSource()==button){try{while((s=in.readLine())!=null)text.append(s);}catch(IOExceptionexp){}}}

publicclassExample20_4{publicstaticvoidmain(Stringargs[]){EWindoww=newEWindow();w.pack();}}输入输出流--带仓库系统作业第20页5.2BufferedWriter与BufferedReader类相对应是BufferedWriter类。结构方法是:

BufferedWriter(Writerout);写入文件方法是:

write(Strings,intoff,intlen);如:BufferedWriterout=BufferedWriter(newFileReader(“hello.txt”));out.write(“howareyou”,0,s.length());//写入缓冲区

out.flush();//要写入文件,必须执行

输入输出流--带仓库系统作业第21页P263,例5Example20_5TextAreatext;BufferedWriterout;Buttonbutton;FileWritertofile;FWindow(){super("流写入");text=newTextArea(10,10);text.setBackground(Color.cyan);try{tofile=newFileWriter("hello.txt");out=newBufferedWriter(tofile);}catch(FileNotFoundExceptione){}catch(IOExceptione){}button=newButton("写入");button.addActionListener(this);setLayout(newBorderLayout());setSize(60,70);setVisible(true);add(text,"Center");add(button,"South");输入输出流--带仓库系统作业第22页addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){setVisible(false);System.exit(0);}});}

publicvoidactionPerformed(ActionEvente){Strings;if(e.getSource()==button){try{

out.write(text.getText(),0,(text.getText()).length());out.flush();}catch(IOExceptionexp){}}}}publicclassExample20_5{publicstaticvoidmain(Stringargs[]){FWindoww=newFWindow();w.pack();}};输入输出流--带仓库系统作业第23页P267,例7Example20_7

classFrame_FileDialogextendsFrameimplementsActionListener{FileDialogfiledialog_save,filedialog_load;//申明两个文件对话框

MenuBarmenubar1;Menumenu1;MenuItemitem1,item2;TextAreatext;BufferedReaderin;FileReaderfile_reader;BufferedWriterout;FileWritertofile;Frame_FileDialog(){super("带文件对话框窗口");

setSize(60,70);setVisible(true);menubar1=newMenuBar();menu1=newMenu("文件");

item1=newMenuItem("打开文件");

item2=newMenuItem("保留文件");

item1.addActionListener(this);item2.addActionListener(this);menu1.add(item1);menu1.add(item2);menubar1.add(menu1);setMenuBar(menubar1);输入输出流--带仓库系统作业第24页//下面创建一个依赖于该窗口保留文件对话框

filedialog_save=newFileDialog(this,"保留文件对话框",FileDialog.SAVE);filedialog_save.setVisible(false);//再创建一个依赖于该窗口打开文件对话框

filedialog_load=newFileDialog(this,"打开文件对话框",FileDialog.LOAD);filedialog_load.setVisible(false);

filedialog_save.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){

filedialog_save.setVisible(false);}});

filedialog_load.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){

filedialog_load.setVisible(false);}});

addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){

setVisible(false);System.exit(0);}});

输入输出流--带仓库系统作业第25页publicvoidactionPerformed(ActionEvente){if(e.getSource()==item1){

filedialog_load.setVisible(true);Strings;try{//建立到文件fileFileReader流,该文件经过File类和对话框来确定。

Filefile=newFile(filedialog_load.getDirectory(),filedialog_load.getFile());file_reader=newFileReader(file);in=newBufferedReader(file_reader);while((s=in.readLine())!=null)text.append(s+'\n');}catch(FileNotFoundExceptione1){}catch(IOExceptione2){}try{in.close();file_reader.close();}catch(IOExceptionexp){}

输入输出流--带仓库系统作业第26页}elseif(e.getSource()==item2){

filedialog_save.setVisible(true);try{//建立到文件fileFileWriter流,该文件经过File类和对话框来确定。

Filefile=newFile(filedialog_save.getDirectory(),filedialog_save.getFile());tofile=newFileWriter(file);out=newBufferedWriter(tofile);out.write(text.getText(),0,(text.getText()).length());out.flush();

}catch(FileNotFoundExceptione1){}catch(IOExceptione2){}try{out.close();tofile.close();}catch(IOExceptionexp){}}}输入输出流--带仓库系统作业第27页6.RandomAccessFile类因为File类不能读写文件,可使用Stream类或RandomAccessFile类来读写。RandomAccessFile类既不是输入流类InputStream类子类,也不是输出流类OutputStream类子类。RandomAccessFile类创建流指向既能够作为源,也能够作为目标地。结构方法分别是:

RandomAccessFile(Stringname,Stringmode);

RandomAccessFile(Filefile,Stringmode);

参数mode取r(只读)或rw(可读写),决定文件访问权利.输入输出流--带仓库系统作业第28页创建对象时应捕捉FileNotFoundException异常,当流进行读写操作时,应捕捉IOException异常。RandomAccessFile类中方法:

seek(longa);//a确定文件指针距离文件开头字节位置。

getFilePointer()方法获取当前文件指针位置。

输入输出流--带仓库系统作业第29页P271,例9in_and_out=newRandomAccessFile(“tom.txt”,“rw”);try{for(inti=0;i<data.length;i++){in_and_out.writeInt(data[i]);}for(longi=data.length-1;i>=0;i--)//一个int型数据占4个字节,我们从{in_and_out.seek(i*4);//文件第36个字节读取最终面一个整数

System.out.println(“,”+in_and_out.readInt());}//每隔4个字节往前读取一个整数输入输出流--带仓库系统作业第30页7.管道流管道是不一样线程之间直接传输数据基本伎俩。PipedInputStream类创建对象称为一个输入管道,PipedOutputStream类创建对象称为一个输出管道。输出管道与输入管道连接形成一个传输数据通道,使用这么管道,用户能够在不一样线程之间实现数据共享。输入输出流--带仓库系统作业第31页7.1PipedInputStream类PipedInputStream():创建一个管道输入流,它还没有被连接,在使用之前必须连接到一个管道输出流。使用connect(PipedOutputStreamc)

方法连接。

PipedInputStream()in=newPipedInputStream();

PipedOutputStream()out=newPipedOutputStream();

in.connect(out);

PipedInputStream(PipedOutputStreama);//创建一个管道输入流,它被连接到由参数a指定管道输出流。输入输出流--带仓库系统作业第32页7.2PipedOutputStream类PipedOutputStream():创建一个管道输出流,它还没有被连接,在使用之前必须连接到一个管道输入流。使用connect(PipedInputStreamc)

方法连接。

PipedOutputStream()out=newPipedOutputStream();PipedInputStream()in=newPipedInputStream();out.connect(in);

PipedOutputStream(PipedInputStreama);//创建一个管道输出流,它被连接到由参数a指定管道输入流。输入输出流--带仓库系统作业第33页7.3管道流异常创建管道流都必须捕捉IOException异常。

try{

PipedInputStream()in=newPipedInputStream();}catch(IOExceptione){}

输入输出流--带仓库系统作业第34页P274,例11Example20_11importjava.io.*;publicclassExample20_11{publicstaticvoidmain(Stringargs[]){PipedOutputStreamout=null;PipedInputStreamin=null;try{

out=newPipedOutputStream();in=newPipedInputStream();in.connect(out);}catch(IOExceptione){}

thread1one=newthread1(out,in);thread2two=newthread2(in,out);one.start();two.start();}}输入输出流--带仓库系统作业第35页classthread1extendsThread{PipedOutputStreamout;PipedInputStreamin;byteb[]={1,2,3};thread1(PipedOutputStreama,PipedInputStreamb){try{out=a;in=b;out.connect(in);}catch(IOExceptione){}}

publicvoidrun(){try{out.write(b,0,3);}catch(IOExceptione){}} }输入输出流--带仓库系统作业第36页classthread2extendsThread{PipedOutputStreamout;PipedInputStreamin;bytea[]=newbyte[3];thread2(PipedInputStreama,PipedOutputStreamb){try{in=a;out=b;in.connect(out);}catch(IOExceptione){}}

publicvoidrun(){try{in.read(a,0,3);for(inti=0;i<=2;i++){System.out.println(""+a[i]);}intc=a[0]+a[1]+a[2];System.out.println(""+c);}catch(IOExceptione){}}}输入输出流--带仓库系统作业第37页8.数据流数据流允许程序按与机器无关格调读取Java原始数据。结构方法:DateInputStream(InputStreamin);

DateOutputStream(OutputStreamout);惯用方法:P276.P277,例12输入输出流--带仓库系统作业第38页9.对象流ObjectInputStream类和ObjectOutputStream类分别是DateInputStream和DateOutputStream类子类.结构方法:DateInputStream(InputStreamin);

DateOutputStream(OutputStreamout);ObjectInputStream类和ObjectOutputStream类创建对象被称为对象输入流和对象输出流.对象输出流使用writeObject(Objectobj)方法写文件.对象输入流使用readObject()方法读文件.输入输出流--带仓库系统作业第39页9.1创建对象流方法ObjectInputStream/DateOutputStream指向是一个输入/输出流对象,因而要首先用FileInputStream/

FileOutputStream创建一个文件流.如:

FileInputStreamfile_in=newFileInputStream(“a.txt”);ObjectInputStreamobject_in=newObjectInputStream(file_in);

FileOutputStreamfile_out=newFileOutputStream(“a.txt”);ObjectOutputStreamobject_out=newObjectOutputStream(file_out);

输入输出流--带仓库系统作业第40页P281,例14publicclassExample20_14extendsFrameimplementsActionListener{TextAreatext=null;Buttonreader=null,writer=null;

FileInputStreamfile_in=null;FileOutputStreamfile_out=null;ObjectInputStreamobject_in=null;ObjectOutputStreamobject_out=null;Example20_14(){setLayout(newFlowLayout());text=newTextArea(6,10);reader=newButton读入对象");writer=newButton(“写出对象");reader.addActionListener(this);writer.addActionListener(this);setVisible(true);add(text);add(reader);add(writer);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});pack();set

温馨提示

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

评论

0/150

提交评论