java课件11java io2学时计算机学院软件工程系_第1页
java课件11java io2学时计算机学院软件工程系_第2页
java课件11java io2学时计算机学院软件工程系_第3页
java课件11java io2学时计算机学院软件工程系_第4页
java课件11java io2学时计算机学院软件工程系_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、主讲教师 张 智计算机学院软件工程系11 Java IO11.1 控制台I/O11.2 文件类11.3 Java I/O流11.1 控制台I/Ojava.lang.System支持控制台I/O。System.out 是一个PrintStream对象,它指向运行Java应用程序的终端窗口。System.in 是一个InputStream对象,它指向用户的键盘。System.err 是一个PrintStream对象,它指向运行Java应用程序的终端窗口,用于出错信息的输出。输入输出示例import java.io.*;public class test public static void mai

2、n(String args) String s; InputStreamReader isr = new InputStreamReader( System.in ); BufferedReader br = new BufferedReader( isr ); System.out.print(请输入str ); trys = br.readLine( ); System.out.println(你输入了: + s);br.close(); /关闭输入流 catch(IOException e) e.printStackTrace(); 【Return】字节流封装成字符流字符流缓冲11.2

3、文件类File类的对象可以代表一个具体的文件路径,可以使用绝对路径也可以使用相对路径。绝对路径如:d:javatestHello.java相对路径如:testHello.java File对象用法示例 (windows文件系统)File f1 = new File(d:test1.txt); /绝对路径File f2 = new File(1.txt); /相对路径File f3 = new File(e:abc); /文件夹(也是文件路径)File f4 = new File(d:test, 1.txt); /父路径+子路径结合File myFile = new File(C: + File

4、.separator + jdk1.5.0 + File.separator+File.java);较安全建立文件的方法File类常用方法 文件名相关String getName():获得当前文件或文件夹的名称。例如c:test1.t,则返回1.t。String getPath():获得当前对象的路径名。例如c:test1.t,则返回c:test1.t。String getAbsolutePath():获得当前文件或文件夹的绝对路径。例如c:test1.t,则返回c:test1.t。String getParent():获得当前路径中的父路径。例如c:test1.t则,返回c:test。boo

5、lean renameTo(File newName):修改文件名。放在示例中看文件测试相关boolean exists():当前文件或文件夹是否存在。boolean canRead():当前文件或文件夹是否可读。boolean canWrite():当前文件或文件夹是否可写。boolean isFile():当前File对象是否是文件。boolean isDirectory():当前File对象是否是目录。boolean isAbsolute():当前File对象路径是否为绝对路径。通用文件信息和工具boolean createNewFile():创建指定的文件(不能用于创建文件夹),且文件

6、路径中包含的文件夹必须存在。boolean delete():删除当前文件或文件夹(文件夹必须为空)。long lastModified():返回文件的最后修改时间,long类型呵呵。long length():返回文件存储时占用的字节数 (实际大小) 。目录工具boolean mkdir():创建文件夹(父路径上的文件夹必须存在),而不创建该路径中的其它文件夹。成功则true,否false。boolean mkdirs():创建文件夹,父目录不存在时,也会自动根据需要创建。String list():返回当前文件夹下所有的文件名和文件夹名称 (不是绝对路径) 。File listFiles(

7、):返回当前文件夹下所有的文件对象。新建目录public static void newFolder(String folderPath) File myFilePath =new File(folderPath); if (!myFilePath.exists() boolean flag=myFilePath.mkdir(); / or mkdirs() if (flag) System.out.println(新建目录操作成功); else System.out.println(新建目录操作失败); 调用示例:newFolder(e:abc);newFolder(e:abc123);父路

8、径中包含的文件夹必须存在新建文件public static void newFile(String filePathAndName, String fileContent) try File myFilePath = new File(filePathAndName); if (!myFilePath.exists() myFilePath.createNewFile(); FileWriter resultFile = new FileWriter(myFilePath); PrintWriter myFile = new PrintWriter(resultFile); myFile.pr

9、intln(fileContent); myFile.close(); resultFile.close(); System.out.println(新建文件操作成功!); catch (IOException e) System.out.println(新建文件操作出错!); e.printStackTrace(); fileContent为文件内容关于FileWriter参考11.3节调用示例: newFile(e:abc1.txt,abc);路径中包含的文件夹必须存在删除文件public static void delFile(String filePathAndName) File m

10、yDelFile =new File(filePathAndName); boolean flag=myDelFile.delete(); if(flag) System.out.println(删除文件操作成功!); else System.out.println(删除文件操作出错!); 调用示例:delFile(e:abc1.txt);练习-显示所有文件和文件夹public static void listFiles(String filePath) File path=new File(filePath);String list=path.list();System.out.printl

11、n(文件和文件夹总数:+list.length);for(String s:list) System.out.println(s);【Return】11.3 Java I/O流流的概念流是Java内存中的一组有序数据序列。Java中对文件的操作是以流的方式进行的。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后还可以将这些流写到另外的目的地(文件、内存、控制台、网络)。 Java的流分类按照输入的方向(参照对象是Java程序):输入流和输出流。按照处理数据的单位:字节流和字符流。字符流通常是文本文件,一般与机器直接交互的输入输出都是二进制字节流。按照功能的不同分:节点流

12、和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流。(重点和难点)I/O类结构(字符流)I/O类结构(字节流)如何理解不管流的分类是多么复杂,其根源来自于四个基本的类(基本流):进行字节流到字符流的转换,通常用字符流类:InputStreamReader、OutputStreamWriter实现。从字节流和字符流的缓冲容器来看有byte和char之分,所以派生出: ByteArrayInputStream / ByteArrayOutputStream CharArrayInputStream / CharArrayOutputStr

13、eam CharArrayReader / CharArrayWriter字节流字符流输入流InputStreamReader输出流OutputStreamWriter如何理解(续)以上类只是流的表示形式,而在传输形式上通常还会再封装成缓冲流(处理流) :BufferedInputStream / BufferedOutputStream 字节缓冲流BufferedReader / BufferedWriter 字符缓冲流每一个顶层类都有对目录文件(File)的支持,实现对文件的读取操作: FileInputStream / FileOutputStream 以字节流形式读取文件 FileRe

14、ader / FileWriter 以字符流形式读取文件(文本文件)缓冲流可获得更高的读取效率(如按行读写)示例从键盘读入一行数据读文件:从文件中逐行读取数据显示在屏幕上。写文件:从键盘读入数据行写入文件中。 示例1:从键盘读入一行数据trySystem.out.print(请输入: );BufferedReader br =new BufferedReader( new InputStreamReader( System.in ) ); String s = br.readLine( ); /读取一行System.out.println(你输入了: + s); br.close(); cat

15、ch(IOException e)e.printStackTrace();详解见后页详解工作流程trySystem.out.print(请输入: );InputStream is=System.in; / System.in是键盘输入的字节流 InputStreamReader isr=new InputStreamReader(is); /将输入的字节流转换为字符流 BufferedReader br=new BufferedReader(isr); /将字符流封装为字符缓冲流(效率更高)String s = br.readLine( ); /读取一行System.out.println(你

16、输入了: + s); br.close(); isr.close(); is.close();catch(IOException e)e.printStackTrace();System.in转换为字符流读取字节流InputStreamInputStreamReader封装为字符缓冲流BufferedReaderreadLine合为一句BufferedReader br =new BufferedReader(new InputStreamReader(System.in);利用InputStream读取键盘输入的字节流System.in,然后通过InputStreamReader将输入的字节

17、流转换为字符流,此时的字符流处理效率不高,因此再通过BufferedReader将该字符流封装为读取效率更高的字符缓冲流。 补充:BufferedReader.read() 读取一个字符,返回其unicode编码值(整型,0-65535),如果读到流的末尾则返回-1。基本用法:int c;while(c=br.read()!=n) /一次只读取一个字符直至回车结束 System.out.print( (char)c );如果用while(c=br.read()!= -1 )则可读取多行,直到Ctrl+Z结束输入流【Return】示例2:读文件从文件中逐行读取数据显示在屏幕上。 方法1:以读文件

18、字节流FileInputStream开始,要将字节流转换成字符流。tryFileInputStream fis = new FileInputStream(d:/1/1.txt); /定义一个文件字节流 InputStreamReader isr = new InputStreamReader(fis); /将字节流转换成字符流 BufferedReader br = new BufferedReader(isr); /将字符流转换成缓存流String s=; String ss =; while(s = br.readLine()!= null) /一次读取一行ss += s+n; br.c

19、lose(); isr.close(); fis.close();System.out.print(ss);catch(IOException e) e.printStackTrace();转换为字符流读取文件字节流FileInputStreamInputStreamReader封装为字符缓冲流BufferedReaderreadLine方法2:以读文件字符流FileReader开始,无需字节流到字符流的转换。tryBufferedReader br = new BufferedReader(new FileReader(d:11.txt); String s=; String ss =;wh

20、ile(s = br.readLine()!= null) ss+=s+n; br.close(); System.out.print(ss);catch(IOException e)e.printStackTrace();读取文件字符流 FileReader封装为字符缓冲流BufferedReaderreadLine一个字符一个字符的读取:int c;while(c=br.read()!=-1) /-1表示到文件末尾 System.out.print ( (char)c );【Return】示例3:写文件从键盘读入数据行写入文件中。方法1:以写文件字节流FileOutputStream开始t

21、rySystem.out.println(请输入文件内容,以Ctrl+Z结束:);FileOutputStream fos = new FileOutputStream(d:/1/1.txt); /定义一个文件字节流(输出型)OutputStreamWriter osw= new OutputStreamWriter(fos); /将字节流转换成字符流BufferedWriter bw = new BufferedWriter(osw); /封装为缓冲流(输出型)BufferedReader br=new BufferedReader(new InputStreamReader(System.

22、in); /创建字符流缓冲(输入型)String s=;while(s = br.readLine() != null ) bw.write(s); /将BufferedReader信息写入BufferedWriter,最终写入文件 bw.newLine(); /换行 或者bufferedWriter.write(rn); System.out.println(文件已保存); br.close(); bw.close(); osw.close(); fos.close(); catch(IOException e) e.printStackTrace(); System.in转换为字符流读取字

23、节流InputStreamInputStreamReader封装为字符缓冲流BufferedReaderreadLine转换为字符流写入文件字节流FileOutStreamOutputStreamWriter封装为字符缓冲流BufferedWriterwrite方法2:以写文件字符流FileWriter开始,无需字节流到字符流的转换tryPrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(d:11.txt);BufferedReader br =new BufferedReader(new InputStream

24、Reader(System.in); String s=;while(s = br.readLine() != null ) pw.println(s); /PrintWriter可直接输出换行br.close(); pw.close();catch(EOFException e) System.err.println(“End of stream”); /多加了一个捕捉catch(IOException e) e.printStackTrace();System.in转换为字符流读取字节流InputStreamInputStreamReader封装为字符缓冲流BufferedReaderreadLine转换为字符流写入文件字符流FileWriterBufferedWriterPrintWriterprintln封装为高级应用字符流进一步封装思考题分别用字节流和字符流2种方式:实现文件复制功能。public static void copyFile(String srcfilePathAndName, String targetfilePathAndName) try File sourceFile = new File(srcfilePathAndName); FileInputStream in = new FileInputStream(sr

温馨提示

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

评论

0/150

提交评论