第10章输入输出流.ppt
《第10章输入输出流.ppt》由会员分享,可在线阅读,更多相关《第10章输入输出流.ppt(82页珍藏版)》请在三一文库上搜索。
1、第10章 输入、输出流,输入/输出类库,Java的输入/输出是以流的方式来处理的。 按流的方向可以分为输入流和输出流 Java中流有字节流和字符流之分,说明,只能从输入流读取数据,不能写入数据 只能向输出流写入数据,不能读取数据 对输入流,不必关心其源端是什么文件或设备,只要从流中读取数据即可 对输出流,不必关心其目标具体情况,只要向流中写入数据即可,创建一个File对象的构造方法有3个: File(String filename); File(String directoryPath,String filename); File(File f, String filename); 说明:Fi
2、le类在io包里,所以使用之前要导入该包: import java.io.*; 本章使用的类基本上都在这个包里,10.1 File类,public String getName() 获取文件的名字。 public boolean canRead() 判断文件是否是可读的。 public boolean canWrite() 判断文件是否可被写入。 public boolean exits() 判断文件是否存在。 public long length() 获取文件的长度(单位是字节)。 public String getAbsolutePath() 获取文件的绝对路径。 public Strin
3、g getParent() 获取文件的父目录。 public boolean isFile() 判断文件是否是一个普通文件,而不是目录。 public boolean isDirectroy() 判断文件是否是一个目录。 public boolean isHidden() 判断文件是否是隐藏文件。 public long lastModified() 获取文件最后修改的时间(时间是从1970年午夜至文件最后修改时刻的毫秒数)。,10.1.1 文件的属性,import java.io.*; public class Example10_1 public static void main(Stri
4、ng args) File f = new File(“C:ch10“,“Example10_1.java“); System.out.println(f.getName()+“是可读的吗:“+f.canRead(); System.out.println(f.getName()+“的长度:“+f.length(); System.out.println(f.getName()+“的绝对路径:“+f.getAbsolutePath(); File file = new File(“new.txt“); System.out.println(“在当前目录下创建新文件“+file.getName(
5、); if(!file.exists() try file.createNewFile();/调用该方法会引起IOException System.out.println(“创建成功“); catch(IOException exp) ,1创建目录 File对象调用方法:public boolean mkdir()创建一个目录,如果创建成功返回true,否则返回false(如果该目录已经存在将返回false),10.1.2 目录,如果File对象是一个目录,那么该对象可以调用下述方法列出该目录下的文件和子目录。 public String list() 用字符串形式返回目录下的全部文件。 pu
6、blic File listFiles() 用File对象形式返回目录下的全部文件。,2列出目录中的文件,有时需要列出目录下指定类型的文件。可以使用File类的下述两个方法,列出指定类型的文件: public String list(FilenameFilter obj) 该方法用字符串形式返回目录下的指定类型的所有文件。 public File listFiles(FilenameFilter obj) 该方法用File对象形式返回目录下的指定类型所有文件。,FilenameFilter,上述两个方法的参数FilenameFilter是一个接口,该接口有一个方法: Public boolea
7、n accept(File dir,String name) 使用list方法时,需要向该方法传递一个实现FilenameFilter接口的对象,list执行时,不断回调接口方法accept,当接口方法返回true时,list方法就将名字为name的文件保存在返回的数组中,import java.io.*; public class Example10_2 public static void main(String args) File dir=new File(“.“); FileAccept fileAccept=new FileAccept(); fileAccept.setExten
8、dName(“java“); String fileName=dir.list(fileAccept); for(String name:fileName) System.out.println(name); ,import java.io.*; public class FileAccept implements FilenameFilter private String extendName; public void setExtendName(String s) extendName=“.“+s; public boolean accept(File dir,String name) /
9、重写接口中的方法 return name.endsWith(extendName); ,当使用File类创建一个文件对象后,例如 File file=new File(“c:myletter“,“letter.txt“); 如果c:myletter目录中没有名字为letter.txt文件,文件对象file调用方法: public boolean createNewFile(); 可以在c:myletter目录中建立一个名字为letter.txt的文件。文件对象调用方法 public boolean delete() 可以删除当前文件,例如: file.delete();,10.1.3 文件的创
10、建与删除,当要执行一个本地机上的可执行文件时,可以使用java.lang包中的Runtime类。首先使用Runtime 类声明一个对象,如: Runtime ec; 然后使用该类的getRuntime()静态方法创建这个对象: ec=Runtime.getRuntime(); ec可以调用exec(String command)方法打开本地机的可执行文件或执行一个操作,10.1.4 运行可执行文件,import java.io.*; public class Example10_3 public static void main(String args ) try Runtime ce=Run
11、time.getRuntime(); File file=new File(“c:windows“,“Notepad.exe“); ce.exec(file.getAbsolutePath(); file=new File(“C:Program FilesInternet Explorer“,“IEXPLORE “); ce.exec(file.getAbsolutePath(); catch(Exception e) System.out.println(e); 打开本机上的记事本和浏览器,java.io包提供了大量的流类 InputStream 抽象的字节输入流类 OuputStream
12、 抽象的字节输出流类 Reader 抽象的字符输入流类 Writer 抽象的字符输出流类,10.2 字节流与字符流,输入输出流类,字节流 从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位(声音图像)。 public abstract class InputStream extends Object public abstract class OutputStream extends Object 字符流 从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位(文本文件)。 public
13、abstract class Reader extends Object public abstract class Writer extends Object,字节流:InputStream,字节流:InputStream,InputStream类包含了一套所有输入流都需要的方法,可以完成最基本的从输入流中读取数据 InputStream的子类中: FileInputStream:文件输入流 DataInputStream:数据输入流,从输入流中读取数 据时,可以实现对二进制字节数据的理解和编码 BufferedInputStream:缓冲输入流,具备缓冲功能的输入字节类,标准输入:Syst
14、em.in,Java 的标准输入设备键盘用System.in表示, System.in属于InputStream类对象。 public final class System extends Object public static final InputStream in /标准输入常量 public static final PrintStream out /标准输出常量 public final static PrintStream err /标准错误输出常量 ,说明,System.out是一个已经预先处理过的,被包装成PrintStream的对象。和System.out一样,System
15、.err也是一个PrintStream,但是System.in就不对了,它是一个未经处理的InputStream。也就是说,虽然你可以直接往System.out和System.err上写,但是要想读System.in的话,就必须先做处理了。,InputStream类提供的read方法以字节为单位顺序地读取源中的数据,只要不关闭流,每次调用read方法就顺序地读取源中的其余内容,直到源的末尾或输入流被关闭,10.2.1 InputStream类与OutputSream类,int read() int read(byte b ) int read(byte b , int off, int len
16、) 关于read: 输入流调用该方法从源中读取单个字节的数据,该方法返回字节值(即ASCII字符值),如果未读出字符就返回-1 void close()/关闭流 long skip(long numBytes),InputStream类有如下常用的方法,字节流:OutputStream,OutputStream流以字节为单位顺序地写文件,只要不关闭流,每次调用write方法就顺序地向目的地写入内容,直到流被关闭。,OutputStream类有如下的常用的方法 void write(int n) void write(byte b ) void write(byte b ,int off,int
17、 len) void close(),Reader类提供的read方法以字符为单位顺序地读取源中的数据,只要不关闭流,每次调用read方法就顺序地读取源中的其余内容,直到源的末尾或输入流被关闭,10.2.2 Reader类与Writer类,字符流:Reader,字符流:Reader,Reader类是处理所有字符流输入类的父类。 Reader类具有与InputStream类相似的方法。 子类: BufferedReader类:具备缓冲功能的字符 输入类 InputStreamReader是字节输入流和字符输入流之间的一座桥梁,它从字节数据流读入数据,然后根据字符编码规则将它们转成字符。 File
18、Reader类用于从文件中读入字符流,Reader类有如下常用的方法 int read() int read(char b ) int read(char b , int off, int len) 关于read: 输入流调用该方法从源中读取一个字符,该方法返回一个整数(即Unicode字符值),如果未读出字符就返回-1 void close() long skip(long numBytes),Writer流以字符为单位顺序地写文件,只要不关闭流,每次调用write方法就顺序地向目的地写入内容,直到流被关闭。,字符流:Writer,Writer类有如下常用的方法 void write(int
19、 n) void write(char b ) void write(char b ,int off,int length) void close(),流都提供了关闭方法close(),尽管程序结束时会自动关闭所有打开的流,但是当程序使用完流后,显式地关闭任何打开的流仍是一个良好的习惯。如果没有关闭那些被打开的流,那么就可能不允许另一个程序操作这些流所用的资源,10.2.3 关闭流,由于应用程序经常需要和文件打交道,所以InputStream专门提供了读写文件的子类:FileInputStream和FileOutputSream类。 如果程序对文件的操作比较简单,比如只是顺序地读写文件,那么就
20、可以使用FileInputStream和FileOutputSream类创建的流对文件进行读写操作。,10.3 文件字节流,如果需要以字节为单位读取文件,就可以使用FileInputStream类来创建指向该文件的文件字节输入流。下面是FileInputStream类的两个构造方法: FileInputStream(String name); FileInputStream(File file); 文件字节流可以调用从父类继承read方法顺序地读取文件,只要不关闭流,每次调用read方法就顺序地读取文件中的其余内容,直到文件的末尾或文件字节输入流被关闭,10.3.1 文件字节输入流,说明,Fi
21、leInputStream输入流打开一个到达文件的输入流,当使用文件输入流构造方法建立通往文件的输入流时,可能会出现IOException异常。 因此要有捕获异常的操作,import java.io.*; public class Example10_4 public static void main(String args) int n=-1; byte a=new byte100; try File f=new File(“Example10_4.java“); FileInputStream in = new FileInputStream(f); while(n=in.read(a,0
22、,100)!=-1) String s=new String (a,0,n); System.out.print(s); in.close(); catch(IOException e) System.out.println(“File read Error“+e); ,当程序需要把信息以字节为单位写入到文件时,可以使用FileOutputStream类来创建指向该文件的文件字节输出流。下面是FileOutputStream类的两个构造方法: FileOutputStream(String name) FileOutputStream(File file),10.3.2 文件字节输出流,imp
23、ort java.io.*; public class Example10_5 public static void main(String args ) byte a = “国庆60周年“.getBytes(); byte b = “十一快乐“.getBytes(); try FileOutputStream out=new FileOutputStream(“happy.txt“); out.write(a); out.write(b,0,b.length); out.close(); catch(IOException e) System.out.println(“Error “+e);
24、 ,字节输入流和输出流的read和write方法使用字节数组读写数据,即以字节为基本单位处理数据。因此,字节流不能很好地操作Unicode字符 与FileInputStream、FileOutputStream字节流相对应的是FileReader、FileWriter字符流,FileReader和FileWriter分别是Reader和Writer的子类,其构造方法分别是: FileReader(String filename); FileReader(File filename); FileWriter (String filename); FileWriter (File filename
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 输入输出
链接地址:https://www.31doc.com/p-3122501.html