您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第一章-输入输出IO
第一章输入/输出IOIO(输入/输出)是所有程序都必需的部分:使用输入机制,允许程序读取外部数据(包括来自磁盘、光盘等存储设备的数据)、用户输入数据;使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘、光盘等存储设备中。java的IO支持通过java.io包下的类和接口来支持,在java.io包下主要包括输入、输出两种IO流。输入、输出:字节流和字符流。字节流以字节为单位来处理输入、输出操作。字符流以字符来处理输入输出操作。一、File类File类是java.io包下代表与平台无关的文件和目录,也就是说如果希望在程序中操作文件和目录都可以通过File类来完成,值得指出的是不管是文件、还是目录都使用File来操作,File能新建、删除和重命名文件和目录。File不能访问文件内容本身,如需访问内容本身则需通过IO流实现。1.1.1访问文件和目录File类可能使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。访问文件名相关方法:StringgetName():返回此File对象的所表示的文件名或路径名(如果是路径的话,返回最后一级子路径名)。StringgetPath():返回此File对象所对应的路径名。FilegetAbsoluteFile():返回此File对象所指的绝对路径所对应的File对象StringgetAbsolutePath():返回此File对象所对应的绝对路径名StringgetParent():返回此File对象对应目录(最后一级子目录)的父目录名。BooleanrenameTo(FilenewName):重命名此File对象对应的文件或目录,如果重命名成功则返回true;否则返回false检测文件相关的方法:Booleanexists():判断File对象对应的文件或目录是否存在。BooleancanWrite():判断File对象对应的文件和目录是否可读。BooleancanRead():判断File对象对应的文件和目录是否可写。BooleanisFile():判断File对象所对应的否是文件、不是目录。获取常规文件信息:longlastModified():返回文件的最后修改时间。longlength():返回文件内容和长度。文件操作相关方法:BooleancreateNewFile():当此File对象所对应的文件不存在时,该方法将新建一个该File对象所指定的新文件,创建成功返回true,否则返回false.Booleandelete():删除File对象所对应的文件或路径。staticFilecreateTempFile(Stringprefix,Stringsuffix):使用给定的前缀、系统生成的随机数和给定后缀作为文件名。prefix参数至少是三个字节。直接使用File类来调用staticFilecreateTempFile(Stringprefix,Stringsuffix,Filedirectory):在指定File对象的目录使用给定的前缀、系统生成的随机数和给定后缀作为文件名。prefix参数至少是三个字节。直接使用File类来调用voiddeleteOnExit():当JVM退出时,删除File对象所对应的文件和目录。目录操作的相关方法:Booleanmkdir():试图创建一个File对象所对应的目录,如果创建成功,则返回true,否则返回false。调用方法时的File对象必须对应的是一个路径,而不是一个文件。String[]list():列出File对象的所有子文件名和路径名,返回String数组。File[]listFiles():列出File对象的所有子文件和路径,返回File数组。staticFile[]listRoot():列出系统所有的根路径,返回File数组。操作示例:publicclassBaseFile{publicstaticvoidmain(String[]args)throwsIOException{//以当前路径创建一个File对象Filefile=newFile(.);//获取File对象的文件名System.out.println(file.getName());//获取相对路径的父路径,可能出错,输出nullSystem.out.println(file.getParent());//获取绝对路径System.out.println(file.getAbsolutePath());//获取上一级路径System.out.println(file.getAbsoluteFile().getParent());//在当前路径下创建临时文件FiletempFile=File.createTempFile(aaa,.txt,file);//文件名由指定的前缀+系统随机数+文件后缀(存在指定file路径)System.out.println(临时文件名:+tempFile.getName());//程序退出时删掉该文件(JVM停止运行时)tempFile.deleteOnExit();//使用当前系统时间创建文件FilenewFile=newFile(System.currentTimeMillis()+);System.out.println(newFile对象是否存在:+newFile.exists());//以指定的newFile对象来创建一个文件。newFile.createNewFile();//以newFile对象来创建一个目录,因为newFile已经存在,//所以下面方法返回false,即无法创建该目录;newFile.mkdir();//使用list方法来列出当前路径下的所有文件和路径String[]fileList=file.list();System.out.println(\n==========当前路径下所有的文件和路径如下=========);for(Stringf:fileList){System.out.println(f);}//静态方法列出所有磁盘根路径File[]roots=File.listRoots();System.out.println(\n==========系统所有根路径如下=========);for(Filer:roots){System.out.println(r);}}}二、理解Java的IO流Java的IO流是实现输入/输出的基础,它可以方便实现数据的输入/输出操作,Java中把不同输入/输出源(键盘、文件、网络连接等)抽象的表述为“流”(stream),通过流的方式允许java程序使用相同方式来访问不同的输入/输出源。Java把所有传统的类型流(类或抽象类)都放在java.io包中,用以实现输入/输出功能。1.2.1流的分类输入流和输出流按着流的流向来分,可以分为输入流和输出流。输入流:只能从中读取数据,不能向其写出数据。硬盘–内存输出流:只能向其写出数据,不能从中读取数据。内存硬盘此处的输入、输出涉及到一个方向的问题,数据从内存到硬盘,通常我么称为输出流——也就是说,这里的输入,输出都是从程序运行所在的内存的角度来划分的。java的输入流主要由InputStream和Reader作为基类,而输出流主要由OutputStream和Writer作为基类。三、字节流和字符流字节流和字符流区别非常简单,它们的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的是字节,字符流操作的是字符。字节流主要由InputStream和OutputStream作为基类,而字符流则主要由Reader和Writer作为基类。1.3.1InputStream和ReaderInputStream和Reader是所有输入流的基类,它们都是两个抽象类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板,所以它们的方法是所有输入流都可以使用的方法。在InputStream里包含如下三个方法:intread():从输入流中读取单个字节,返回所读取的字节数据(可直接转换为int类型)。intread(byte[]b):从输入流中读取最多b.length个字节数据,并将其存储在字节数组b中,返回实际读取的字节数。intread(byte[]b,intoff,intlen):从输入流中读取最多len个字节数据,并将其存储在字节数组b中,放入b数组中时,并不是从数组的起点开始,而是从off位置开始,返回实际读取的字节数。/***文件输入流测试代码*@authorZhaoJing*/publicclassFileInputStreamTest{publicstaticvoidmain(String[]args){FileInputStreamfis=null;try{//创建输入流用于读取当前文件fis=newFileInputStream(src\\io\\FileInputStreamTest.java);//使用字节数组进行读取每次读取1024个字节byte[]buf=newbyte[1024];//实际读取长度inthasRead=0;//循环进行读取while((hasRead=fis.read(buf))0){//每次将读取出的字节数组输出到控制台System.out.println(newString(buf,0,hasRead));}}catch(IOExceptione){e.printStackTrace();}finally{try{fis.close();//关闭输入流}catch(IOExceptione){e.printStackTrace();}}}}在Reader里包含如下三个方法:intread():从输入流中读取单个字符,返回所读取的字符数据(可直接转换为int类型)。intread(char[]cbuf):从输入流中读取最多cbuf.length个字符数据,并将其存储在字符数组cbuf中,返回实际读取的字符数。intread(char[]cbuf,intoff,intlen):从输入流中读取最多len个字符数据,并将其存储在字符数组cbuf中,放入cbuf数组中时,并不是从数组的起点开始,而是从off位置开始,返回实际读取的字符数。/***使用字符流读取文件并输出*@authorZhaoJing*/publicclassFileReaderTest{publicstaticvoidmain(String[]args){FileReaderreader=null;try{//创建字符输入流reader=newFileReader(src\\io\\FileReaderTest.java);//创建一个长度为32的字符数组char[]cs=newchar[100];//实际读取字符数inthasRead=0;while((hasRead=reader.read(cs))0){//循环输出该次读取出的字符System.out.println(newString(cs,0,hasRead));}}catch(IOExceptione){e.printStackTrace();}finally{try{reader.close();//关闭输入流}catch(IOExceptione){e.printStackTrace();}}}}1.3.2OutputStream和writerOutputStream和writer也非常相似,两个流都提供一下三个方法:voidwrite(intc):将指定的字节/字符输出到输出流中,其中c既可以代表字节,也可以代表字符。voidwrite(byte[]/char[]buf):将字节数组/字符数组中的数据输出到指定输出流中。voidwrite(byte[]/char[]buf,intoff,intlen):将字节数组/
本文标题:第一章-输入输出IO
链接地址:https://www.777doc.com/doc-2201805 .html