第十一天 Java IO操作.docx

上传人:b****3 文档编号:4593410 上传时间:2023-05-07 格式:DOCX 页数:49 大小:405.88KB
下载 相关 举报
第十一天 Java IO操作.docx_第1页
第1页 / 共49页
第十一天 Java IO操作.docx_第2页
第2页 / 共49页
第十一天 Java IO操作.docx_第3页
第3页 / 共49页
第十一天 Java IO操作.docx_第4页
第4页 / 共49页
第十一天 Java IO操作.docx_第5页
第5页 / 共49页
第十一天 Java IO操作.docx_第6页
第6页 / 共49页
第十一天 Java IO操作.docx_第7页
第7页 / 共49页
第十一天 Java IO操作.docx_第8页
第8页 / 共49页
第十一天 Java IO操作.docx_第9页
第9页 / 共49页
第十一天 Java IO操作.docx_第10页
第10页 / 共49页
第十一天 Java IO操作.docx_第11页
第11页 / 共49页
第十一天 Java IO操作.docx_第12页
第12页 / 共49页
第十一天 Java IO操作.docx_第13页
第13页 / 共49页
第十一天 Java IO操作.docx_第14页
第14页 / 共49页
第十一天 Java IO操作.docx_第15页
第15页 / 共49页
第十一天 Java IO操作.docx_第16页
第16页 / 共49页
第十一天 Java IO操作.docx_第17页
第17页 / 共49页
第十一天 Java IO操作.docx_第18页
第18页 / 共49页
第十一天 Java IO操作.docx_第19页
第19页 / 共49页
第十一天 Java IO操作.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第十一天 Java IO操作.docx

《第十一天 Java IO操作.docx》由会员分享,可在线阅读,更多相关《第十一天 Java IO操作.docx(49页珍藏版)》请在冰点文库上搜索。

第十一天 Java IO操作.docx

第十一天JavaIO操作

第十一天JavaIO操作

3、具体内容

         JavaSE的四大核心知识点:

面向对象、类集框架、JavaIO、JDBC。

         JavaIO的核心就一句话解释:

如果抽象类或接口之中的抽象方法被子类所覆写了,那么实例化这个子类的时候,所调用的方法一定是被覆写过的方法。

         所有的IO操作都在java.io包之中进行定义,而且整个java.io包实际上就是五个类和一个接口:

                   · 五个类:

File、InputStream、OutputStream、Reader、Wirter;

                   · 一个接口:

Serializable。

3.1、文件操作类:

File(重点)

         在整个java.io包之中,File类是唯一的一个与文件本身操作有关的类,所谓的文件本身指的是:

文件的创建、删除、重命名、取得文件大小、修改日期。

         如果要想使用File类操作文件的话,那么肯定要通过构造方法实例化File类对象,而实例化File类对象的过程之中主要使用以下两种构造方法:

                   · 在JavaEE的开发之中:

publicFile(Stringpathname);

                   · 在Android开发之中:

publicFile(Fileparent,Stringchild)。

范例:

文件的基本操作,主要有两种功能:

         · 创建文件:

publicbooleancreateNewFile()throwsIOException;

         · 删除文件:

publicbooleandelete();

         · 判断路径是否存在:

publicbooleanexists();

package cn.mldn.demo;

import java.io.File;

public class TestDemo{

    public static void main(String[]args) throws Exception{

        Filefile= new File("D:

\\demo.txt"); // 文件的路径

        if (file.exists()){ // 文件存在

            file.delete(); // 删除文件

        } else { // 文件不存在

            file.createNewFile(); // 创建新文件

        }

    }

}

         本程序操作就表示文件如果存在则删除,如果不存在,则创建一个新的文件,此时基本功能是实现了,不过这个程序此时却存在了三个问题:

问题一:

关于路径分隔符

         在windows操作系统之中,使用“\”作为路径分隔符,而在linux系统下使用“/”作为路径的分隔符,而从实际的开发而言,大部分情况下都会在windows中做开发,而后将项目部署到linux下,那么此时,路径的分隔符都需要进行修改,这样实在是过于麻烦,为此在File类之中提供了一个常量:

publicstaticfinalString separator(按照Java的命名规范来讲,对于全局常量应该使用大写字母的方式定义,而此处使用的是小写,是由Java的发展历史所带来的问题)。

    Filefile= new File("D:

" +File.separator + "demo.txt"); // 文件的路径

问题二:

是有可能(本人没出现过,学生出现过)会出现的问题

         发现当程序执行完成之后,对于文件的创建或者是删除是会存在一些操作上的延迟,如果现在假设先删除了一个文件,而后立刻判断此文件是否存在,那么可能得到的结果就是错误的(为true),因为所有的*.class文件都要通过JVM与操作系统间接操作,这样就有可能会出现延迟的问题。

问题三:

之前进行文件创建的时候都是在根路径下创建完成的,如果说现在要创建的文件有目录呢?

例如,现在要创建一个d:

\hellodemo\my\test\demo.txt文件,而此时在执行程序的时候hellodemo目录不存在,这个时候执行的话就会出现错误提示:

Exceptioninthread"main"java.io.IOException:

 系统找不到指定的路径。

         因为现在目录不存在,所以不能创建,那么这个时候必须要首先判断要创建文件的父路径是否存在,如果不存在应该创建一个目录,之后再进行文件的创建,而要想完成这样的操作,需要以下几个方法的支持:

                  · 找到一个指定文件的父路径:

publicFilegetParentFile();

                   · 创建目录:

publicbooleanmkdirs()。

package cn.mldn.demo;

import java.io.File;

public class TestDemo{

    public static void main(String[]args) throws Exception{

        Filefile= new File("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();

                   · 文件的最后一次修改日期:

public long lastModified();

                   · 取得文件大小:

publiclonglength(),是以字节为单位返回的。

package cn.mldn.demo;

import java.io.File;

import java.math.BigDecimal;

import java.text.SimpleDateFormat;

import java.util.Date;

public class TestDemo{

    public static void main(String[]args) throws Exception{

        Filefile= new File("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("最后一次更改日期:

"

                    + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒")

                            .format(new Date(file.lastModified())));

            System.out.println("文件大小:

"

                    + new BigDecimal(file.length()/(double)1024/1024)

                            .divide(new BigDecimal

(1),2,

                                    BigDecimal.ROUND_HALF_UP).doubleValue()

                    + "M。

");

        }

    }

}

范例:

为一个文件重命名,使用File类可以为文件执行重命名的一个操作,操作方法:

publicbooleanrenameTo(Filedest),在这个方法上需要传入一个File类对象,而这个对象就表示新的名字。

package cn.mldn.demo;

import java.io.File;

public class TestDemo{

    public static void main(String[]args) throws Exception{

        Filefile= new File("D:

" +File.separator + "eclipse.zip"); // 文件的路径

        if (file.exists()){ // 文件存在

            FilenewFile= new File("D:

" +File.separator + "世界末日的eclipse.zip");

            file.renameTo(newFile);

        }

    }

}

         在File类之中有一个非常重要的方法,可以列出一个指定目录下的全部文件信息:

                   · 列出目录内容:

publicFile[]listFiles(),此方法将目录中的所有文件以File对象数组的方式返回;

范例:

列出指定的目录内容

package cn.mldn.demo;

import java.io.File;

public class TestDemo{

    public static void main(String[]args) throws Exception{

        Filefile= new File("D:

" +File.separator + "javademo"); // 文件的路径

        if (file.exists()){ // 文件目录存在

            Fileresult[]=file.listFiles(); // 列出目录中的全部内容

            for (int x=0;x

                System.out.println(result[x]);

            }

        }

    }}

         那么下面继续做一个稍微复杂点的应用,现在希望可以将一个目录之中的全部文件都列出来,那么这种情况下只能采用递归:

因为列出一个目录下的全部文件或文件夹之后,如果发现列出的内容是文件夹,则应该向后继续列出。

〖了解〗范例:

列出指定目录下的全部内容

package cn.mldn.demo;

import java.io.File;

public class TestDemo{

    public static void main(String[]args) throws Exception{

        Filefile= new File("D:

" +File.separator); // 文件的路径

        print(file);

    }

    public static void print(Filefile){

        if (file.isDirectory()){ // 给的路径是文件夹

            Fileresult[]=file.listFiles(); // 列出此目录中的全部内容

            if (result!

= null){

                for (int x=0;x

                    print(result[x]);

                }

            }

        }

        System.out.println(file);

    }}

         当然,如果此时可以将输出操作变为删除操作(file.delete();),就表示彻底清空。

3.2、字节流和字符流(核心)

         使用File类执行的所有操作都是针对于文件本身,但是却没有针对于文件的内容,而要进行文件内容操作就需要通过Java之中提供的两组类完成:

                   · 字节操作流(是在JDK1.0的时候定义的):

OutputStream、InputStream;

                   · 字符操作流(是在JDK1.1的时候定义的):

Writer、Reader。

         但是不管是字节流还是字符流的操作,本身都表示资源操作,而执行所有的资源操作都会按照如下的几个步骤进行,下面以文件操作为例(对文件进行读、写操作):

· 如果要操作的是文件,那么首先要通过File类对象找到一个要操作的文件路径(路径有可能存在,有可能不存在,如果不存在,则要创建路径);

· 通过字节流或字符流的子类为字节流或字符流的对象实例化(向上转型);

· 执行读 / 写操作;

                   · 最后一定要关闭操作的资源(close()),不管日后如何操作,资源永远要关闭。

3.2.1 、字节输出流:

OutputStream

         java.io.OutputStream主要的功能是进行字节数据的输出的,而这个类的定义如下:

publicabstractclassOutputStream

extendsObject

implementsCloseable,Flushable

         发现OutputStream类定义的时候实现了两个接口:

Closeable、Flushable,那么这两个接口的定义如下:

Closeable:

JDK1.5推出

Flushable:

JDK1.5推出

public interface Closeable extendsAutoCloseable{

    public void close() throws IOException;

}

public interface Flushable{

    public void flush() throws IOException;

}

提示:

对于Closeable继承的AutoCloseable接口

         AutoCloseable是在JDK1.7的时候又增加了一个新的接口,但是这个接口的定义和Closeable定义是完全一样的,我个人认为:

有可能在一些其他的类上出现了自动的关闭功能,Closeable是手工关闭,AutoCloseable属于自动关闭。

         但是对于Closeable和Flushable这两个接口实话而言用户不需要关注,因为从最早的习惯对于flush()和close()两个方法都是直接在OutputStream类之中定义的,所以很少去关心这些父接口问题。

         对于OutputStream类而言发现其本身定义的是一个抽象类(abstractclass),按照抽象类的使用原则来讲,需要定义抽象类的子类,而现在如果要执行的是文件操作,则可以使用FileOutputStream子类完成,如果按照面向对象的开发原则,子类要为抽象类进行对象的实例化,而后调用的方法以父类中定义的方法为主,而具体的实现找实例化这个父类的子类完成,也就是说在整个的操作之中,用户最关心的只有子类的构造方法:

                   · 实例化FileOutputStream(新建数据):

publicFileOutputStream(Filefile)throwsFileNotFoundException;

                   · 实例化FileOutputStream(追加数据):

publicFileOutputStream(Filefile,booleanappend)

throwsFileNotFoundException

         当取得了OutputStream类的实例化对象之后,下面肯定要进行输出操作,在OutputStream类之中定义了三个方法:

                   · 输出单个字节数据:

publicabstractvoidwrite(int b)throwsIOException;

                   · 输出一组字节数据:

publicvoidwrite(byte[]b)throwsIOException;

                   · 输出部分字节数据:

publicvoidwrite(byte[]b,intoff,intlen)throwsIOException;

范例:

使用OutputStream向文件之中输出数据,输出路径:

d:

\hellodemo\test.txt

package cn.mldn.demo;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

public class TestDemo{

    public static void main(String[]args) throws Exception{

        Filefile= new File("D:

" +File.separator + "hellodemo"

                +File.separator + "test.txt"); // 第1步:

定义文件路径

        if (!

file.getParentFile().exists()){ // 父路径不存在

            file.getParentFile().mkdirs(); // 创建父路径

        }

        OutputStreamoutput= new FileOutputStream(file); // 第2步:

通过子类实例化父类

        Stringdata= "HelloWorld.";// 要输出的数据

        output.write(data.getBytes()); // 第3步:

输出数据,要将数据变为字节数组输出

        output.close(); // 第4步:

关闭资源

    }

}

         在整个的文件输出过程之中可以发现,如果现在要输出的文件不存在,那么会出现自动创建文件的情况,并且如果重复执行以上的代码,会出现新的内容覆盖掉旧内容的操作,所以下面可以使用FileOutputStream类的另外一个构造方法进行数据的追加:

package cn.mldn.demo;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

public class TestDemo{

    public static void main(String[]args) throws Exception{

        Filefile= new File("D:

" +File.separator + "hellodemo"

                +File.separator + "test.txt"); // 第1步:

定义文件路径

        if (!

file.getParentFile().exists()){ // 父路径不存在

            file.getParentFile().mkdirs(); // 创建父路径

        }

        OutputStreamoutput= new FileOutputStream(file, true);// 第2步:

通过子类实例化父类

        Stringdata= "HelloWorld.\r\n";// 要输出的数据

        output.write(data.getBytes()); // 第3步:

输出数据,要将数据变为字节数组输出

        output.close(); // 第4步:

关闭资

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2