您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 11 第十一天 魔乐java基础视频学习笔记
1、课程名称:JavaIO操作2、知识点2.1、上次课程的主要知识点1、String、Date之间的转换操作,通过java.text.SimpleDateFormat类完成;2、对象比较操作(一组对象排序)需要Comparable接口支持;3、正则表达式符合以及String类对正则的支持。2.2、本次预计讲解的知识点1、文件操作类的使用;2、字节流和字符流的操作;3、对象序列化。3、具体内容JavaSE的四大核心知识点:面向对象、类集框架、JavaIO、JDBC。JavaIO的核心就一句话解释:如果抽象类或接口之中的抽象方法被子类所覆写了,那么实例化这个子类的时候,所调用的方法一定是被覆写过的方法。所有的IO操作都在java.io包之中进行定义,而且整个java.io包实际上就是五个类和一个接口:·五个类:File、InputStream、OutputStream、Reader、Writer;·一个接口:Serializable3.1、文件操作类:File(重点)在整个java.io包之中,File类是唯一的一个与文件本身操作有关的类,所谓的文件本身指的是:文件的创建、删除、重命名、取得文件的大小、修改日期。如果要想使用File类操作文件的话,那么肯定要通过构造方法实例化File类对象,而实例化File类对象的过程之中主要使用以下两种构造方法:·在JavaEE的开发之中:publicFile(Stringpathname);·在Android的开发之中:publicFile(Fileparent,Stringchild)。范例:文件的基本操作,主要有两种功能:·创建文件:publicbooleancreateNewFile()throwsIOException;·删除文件:publicbooleandelete();·判断路径是否存在:publicbooleanexists()。packagecn.mldn.demo;importjava.io.File;publicclassTestDemo{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(D:\\demo.txt);//文件的路径if(file.exists()){//文件存在file.delete();//删除文件}else{//文件不存在file.createNewFile();//创建新文件}}}本程序操作就表示文件如果存在则删除,如果不存在,则创建一个新的文件,此时基本功能是实现了,不过这个程序此时却存在了三个问题:问题一:关于路径分隔符在windows操作系统之中,使用“\”作为路径分隔符,而在linux系统下使用“/”作为路径的分隔符,而从实际的开发而言,大部分情况下都会在windows中做开发,而后将项目部署到linux下,那么此时,路径的分隔符都需要进行修改,这样实在是过于麻烦,为此在File类之中提供了一个常量:publicstaticfinalseparator(按照Java的命名规范来讲,对于全局常量应该使用大写字母的方式定义,而此处使用的是小写,是由Java的发展历史所带来的问题)。Filefile=newFile(D:+File.separator+demo.txt);//文件的路径问题二:有可能出现的问题当程序执行完成之后,对于文件的创建或者是删除是会存在一些操作上的延迟,如果现在假设先删除了一个文件,而后立刻判断此文件是否存在,那么可能得到的结果就是错误的(为ture),因为所有的*.class文件都要通过JVM与操作系统间接操作,这样就可能会出现延迟的问题。问题三:之前进行文件创建的时候都是在根路径下创建完成的,如果说现在要创建的文件有目录呢?例如:现在要创建一个“d:\hellodemo\demo.text”文件,而此时在执行程序的时候hellodemo目录不存在,这个时候执行的话就会出现错误提示:Exceptioninthreadmainjava.io.IOException:系统找不到指定的路径。因为现在目录不存在,所以不能创建,那么这个时候必须要首先判断要创建文件的父路径是否存在,如果不存在应该创建一个目录,之后再进行文件的创建,而要想完成这样的操作,需要以下几个方法的支持。·找到一个指定文件的父路径:publicFilegetParentFile();·创建目录:publicBooleanmkdir()/publicBooleanmkdirs()。packagecn.mldn.demo;importjava.io.File;publicclassTestDemo{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(D:+File.separator+hellodemo+File.separator+my+File.separator+test+File.separator+demo.txt);//文件的路径if(!file.getParentFile().exists()){//父路径不存在file.getParentFile().mkdirs();//创建目录}if(file.exists()){//文件存在file.delete();//删除文件}else{//文件不存在file.createNewFile();//创建新文件}}}以后在任何的java.io.File类开发的过程之中,都一定要考虑文件目录的问题。除了以上的常用的方法之外,在File类之中还可以通过以下的方法取得一些文件的基本信息:·取得文件的名称:publicStringgetName();·给定的路径是否是文件夹:publicBooleanisDirectory();·给定的路径是否是文件:publicbooleanisFile();·是否是隐藏文件:publicbooleanisHidden();·文件的最后一次修改日期:publiclonglastModified·取得文件大小:publiclonglength(),是以字节返回;packagecn.mldn.demo;importjava.io.File;importjava.math.BigDecimal;importjava.sql.Date;importjava.text.SimpleDateFormat;publicclassTestDemo{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(D:+File.separator+eclipse.zip);//文件的路径if(file.exists()){//文件存在System.out.println(文件名称+file.getName());System.out.println(file.getName()+(file.isDirectory()?是一个目录。:不是一个目录。));System.out.println(file.getName()+(file.isFile()?是一个文件。:不是一个文件。));System.out.println(file.getName()+(file.isHidden()?是一个隐藏文件。:不是一个隐藏文件。));System.out.println(最后一次更改日期:+newSimpleDateFormat(yyyy年MM月dd日HH时mm分ss秒).format(newDate(file.lastModified())));System.out.println(文件大小:+newBigDecimal(file.length()/(double)1024/1024).divide(newBigDecimal(1),2,BigDecimal.ROUND_HALF_UP).doubleValue()+M.);}}}范例:为一个文件重命名,使用File类可以为文件执行重命名的一个操作,操作方法:publicbooleanrenameTo(Filedest),在这个方法上需要传入一个File类对象,而这个对象就表示新的名字。packagecn.mldn.demo;importjava.io.File;publicclassTestDemo{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(D:+File.separator+eclipse.rar);//文件的路径if(file.exists()){//文件存在FilenewFile=newFile(D:+File.separator+世界末日的eclipse.rar);file.renameTo(newFile);}}}在File类之中有一个非常重要的方法,可以列出一个指定目录下的全部文件信息:·列出目录内容:publicFile[]listFiles(),此方法将目录中的所有文件以File对象数组的方式返回;范例:列出指定目录下的全部内容packagecn.mldn.demo;importjava.io.File;publicclassTestDemo{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(D:+File.separator+testjava);//文件的路径if(file.exists()){//文件存在Fileresult[]=file.listFiles();//列出目录中的全部内容for(intx=0;xresult.length;x++){System.out.println(result[x]);}}}}那么下面继续做一个稍微复杂点的应用,现在希望可以将一个目录之中的全部文件都列出来,那么这种情况下只能采用递归:因为列出一个目录下的全部文件或文件夹之中,如果发现列出的内容是文件夹,则应该向后继续列出。【了解】范例:列出指定目录下的全部内容packagecn.mldn.demo;importjava.io.File;publicclassTestDemo{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(D:+File.separator);//文件的路径print(file);}publicstaticvoidprint(Filefile){if(file.isDirectory()){//给的路径是文件夹Fileresult[]=file.listFiles();//列出此目录中的全部内容if(result!=null){for(intx=0;xresult.length;x++){print(result[x]);}}}System.out.println(file);}}当然,如果此时可以将输出操作变为删除操作(filedelete();)就表示彻底清空。3.2、字节流和字符流(核心)使用File类执行的所有操作都是针对于文件本身,但是却没有针对于文件的内容,而要进行文件内容操作就需要通过Java之中提供的两组类完成:·字节操作流(是在JDK1.0的时候定义的):OutputStream、InputStream;·字符操作流(是在JDK1.1的时候定义的):Writer、Reader。但是不管是字节流还是字符流的操作,本身都表示资源操作,而执行所有的资源操作都会按照如下的几个步骤进行,下面以文件操作为例(对文件进行读、写操作):·如果要操作的是文件,那么首先要通过File类对象找到一个要操作的文件路径(路径有可能存在,有可能不存在,如果不存在,则要创建路径);·通过字节流或字符流的子类为字节流或字符流的对象实例化(向
本文标题:11 第十一天 魔乐java基础视频学习笔记
链接地址:https://www.777doc.com/doc-4895422 .html