201711671101 《Java程序设计》第十章学习总结

教材学习内容总结

主要内容:File类  文件字节输入、输出流  文件字符输入、输出流  缓冲流  随机流  数组流  数据流  对象流  序列化与对象克隆  使用Scanner解析文件  文件锁

java.io包(I/O流库)提供大量的流类。

输入流指向称为它的,程序通过输入流读取源中的数据。所有输入流都是抽象类InputStream字节输入流)或抽象类Reader字符输入流)的子类。

输出流指向称为它的目的地,程序通过输出流把数据传送到目的地。所有输出流都是抽象类OutputStream字节输出流)或抽象类Writer字符输出流)的子类。

10.1File类

1.File类的对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。

2.构造方法:·File(String filename);//用此创建的文件被认为与当前程序在同一目录中

                       ·File(String directoryPath,String filename);

                       ·File(File dir,String filename);

(filename是文件名,dierctoryPath是文件的路径,dir为一个目录)

3.File类获取文件本身信息的方法

·public String getName()                                ---文件的名字

·public boolean canRead()                            ---是否可读

·public boolean canWrite()                            ---是否可被写入

·public boolean exists()                                 ---是否存在

·public long length()                                        ---文件的长度(单位是字节)

·public String getAbsolutePath()                   ---文件的绝对路径

·public String getParent()                               ---文件的父目录

·public boolean isFile()                                   ---是否是普通文件

·public boolean isDirectory()                          ---是否是目录

·public boolean isHidden()                             ---是否是隐藏文件

·public long lastModified()                              ---最后修改时间

4.目录

创建目录:File对象调用方法public boolean mkdir(),创建成功返回true,否则返回false(如果该目录已经存在将返回false)

列出目录中的文件:·public String[] list()               字符串形式、全部

                                    ·public File [] listFiles()         File对象形式、全部

                                    ·public String[] list(FilenameFilter obj)        字符串形式、指定类型

                                    ·public File [] listFiles(FilenameFilter obj)   File对象形式、指定类型

File对象dirFile调用list方法时,需向该方法传递一个实现FilenameFilter接口的对象。执行时,参数obj不断回调接口方法accept(File dir,String name),其中参数dir为调用list的当前目录dirFile,参数name被实例化为dirFile目录中的一个文件名,当接口方法返回true时,list方法就将名字为name的文件存放到返回的数组中。

5.文件的创建与删除

·使用File类创建一个文件对象  eg:File file = new File("C:\\myletter","letter.txt");

·如果C:\myletter目录中没有letter.txt文件,文件对象file会调用方法  public boolean createNewFile();  创建出这个文件。

·文件对象调用方法  public boolean delete();  可以删除当前文件。

6.java.lang包中的Runtime类声明一个对象,然后用该类的getRuntime()静态方法创建这个对象。

eg:Runtime ec;

         ec=Runtime.getRuntime();

然后ec可以调用exec(String command)方法打开本地机器上的可执行文件或执行一个操作。

10.2文字字节输入流

1.使用输入流的4个基本步骤

a.设定输入流的源;

b.创建指向源的输入流;

c.让输入流读取源中的数据;

d.关闭输入流;

2.FileInputStream类(文件字节输入流)是InputStream类的子类。

3.创建指向文件的输入流:  FileInputStream(String name)  FileInputStream(File file) name和file指定的文件称为输入流的源。

在try-catch语句中的try部分创建输入流,在catch(捕获)部分检测并处理异常。

try{

FileInputStream in = new FileInputStream("hello.txt");

}

catch (IOException e){

System.out.println("File read error:"+e );

}

File f = new File("hello.txt");

try{

FileInputStream in = new FileInputStream(f);

}

catch(IOException e){

System.out.println("File read error:"+e);

}

4.字节输入流的read方法以字节为单位读取源中的数据。(只要不关闭流,每次调用read方法就顺序地读取其余的内容,直到源的末尾或流被关闭。)

in read()读取单个字节,返回字节值(0~255之间的一个整数),未读出就返回-1。

in read(byte b[])读取b.length个字节到字节数组b,返回实际读取字节数,到达文件末尾返回-1。

int read(byte b[],int off,int len)读取len个字节到字节数组b,返回实际读取字节数,到达文件末尾返回-1,参数off指定从字节数组的某个位子开始存放读取的数据。

5.关闭流:关闭方法close()。

10.3文件字节输出流

1.使用输出流的4个基本步骤

a.给出输出流的目的地

b.创建指向目的地的输出流

c.让输出流把数据写入到目的地

d.关闭输出流

2.FileOutputStream类(文件字节输出流)是OutputStream类的子类。

3.创建指向文件的输出流:FileOutputStream(String name)  FileOutputStream(File file) name和file指定的文件称为输出流的目的地。

如果输出流指向的文件不存在,Java就会创建该文件,如果已存在,输出流将刷新该文件。

在try-catch语句中的try部分创建输出流,在catch(捕获)部分检测并处理异常。

FileOutputStream(String name, boolean append);  FileOutputStream(File file,  boolean append);

参数append取值true,输出流不会刷新所指向文件,write的方法将从文件的末尾开始写入数据;append取false,刷新。

4.使用输入流写字节

void write(int n)单个字节

void write(byte b[])一个字节数组

void write(byte b[],int off,int len)从字节数组的off处开始取len个字节

void close()关闭

10.4文件字符输入、输出流

FileReader、FileWriter字符流

构造方法分别是:

FileReader(String filename);FileReader(File filename);

FileWriter(String filename);FileWriter(File filename);

FileWriter(String filename,boolean append);Fil,Wrirer(String filename,boolean append);

10.5缓冲流

(1)BufferedReader和BufferedWriter类创建的对象称作缓冲输入、输出流。二者的源和目的地必须是字符输入流和字符输出流。 

构造方法:

–BufferedReader(Reader in);

–BufferedWriter (Writer out);

(2)BufferedReader和BufferedWriter类读写文件的方法:

–readLine() 读取文本行

–write(String s,int off,int len) 把字符串s写到文件中

–newLine(); 向文件写入一个回行符

10.6随机流

(1)使用RandomAccessFile类来创建一个随机访问文件流。RandomAccessFile类创建的流的指向既可以作为源也可以作为目的地。    

构造方法:

–RandomAccessFile(String name,String mode) ;

–RandomAccessFile(File file,String mode) ;

(2)相关方法:

–seek(long a)  定位RandomAccessFile流的读写位置

–getFilePointer() 获取流的当前读写位置 

–例子8(把几个int型整数写入到一个名字为tom.dat文件 )

–readLine()方法在读取含有非ASCII字符的文件时出现“乱码”现象的解决方法:

  1)读取  String str=in.readLine(); 

  2)用“iso-8859-1”重新编码   byte b[]=str.getBytes("iso-8859-1");

  3)使用当前机器的默认编码将字节数组转化为字符串

                String content=new String(b); 

10.7数组流

1)字节数组流

字节数组输入流ByteArrayInputStream和字节数组输出流ByteArrayOutputStream分别使用字节数组作为流的源和目标。

ByteArrayInputStream构造方法及常用方法

–  ByteArrayInputStream(byte[] buf);

–  ByteArrayInputStream(byte[] buf,int offset,int length);

–  public int read();顺序地从源中读出一个字节

–  public int read(byte[] b,int off,int len);顺序地从源中读出参数len指定的字节数

ByteArrayOutputStream流构造方法及常用方法

–  ByteArrayOutputStream();

–  ByteArrayOutputStream(int size);

–  public void write(int b); 顺序地向缓冲区写入一个字节  

–  public void write(byte[] b,int off,int len); 将参数b中指定的len个字节顺序地写入缓冲区

–  public byte[] toByteArray(); 返回输出流写入到缓冲区的全部字节

(2)字符数组

–  CharArrayReader和CharArrayWriter类是字符数组流,使用字符数组作为流的源和目标。例子10   向内存(输出流的缓冲区)写入字符串 。

10.8数据流

DataInputStream和DataOutputStream类创建的对象称为数据输入流和数据输出流。

构造方法:

–   DataInputStream(InputStream in)创建的数据输入流指向一个由参数in指定的底层输入流

–   DataOutputStream(OutnputStream out)创建的数据输出流指向一个由参数out指定的底层输出流

10.9对象流

ObjectInputStream和ObjectOutputStream类创建的对象称为对象输入流和对象输出流。

它的构造方法是:

–    ObjectInputStream(InputStream in)

–   ObjectOutputStream(OutputStream out)

相关方法:

–     writeObject(Object obj) 将一个对象obj写入到一个文件

–    readObject() 读取一个对象到程序中 

所谓序列化:一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。

10.10序列化与对象克隆

如果一个“复制品”实体的变化不会引起原对象实体发生变化,反之亦然。这样的复制品称为原对象的一个克隆对象或简称克隆。

一个对象调用clone()方法就可以获取该对象的克隆对象。

对象输入流通过对象的序列化信息来得到当前对象的一个克隆。

10.11使用Scanner解析文件

用Scanner类和正则表达式来解析文件。

(1)使用默认分隔标记解析文件

      创建Scanner对象,并指向要解析的文件,例如:

      File file = new File("hello.java");

      Scanner sc = new Scanner(file);

      sc将空白作为分隔标记

相关方法  next()依次返回file中的单词

              hasNext()判断file最后一个单词是否已被next()方法返回.

(2)使用正则表达式作为分隔标记解析文件 : 创建Scanner对象,指向要解析的文件,并使用useDelimiter方法指定正则表达式作为分隔标记,例如:

    File file = new File("hello.java");

    Scanner sc = new Scanner(file);

    sc.useDelimiter(正则表达式);

    sc将正则表达式作为分隔标记

    相关方法 next()    依次返回file中的单词

            hasNext() 判断file最后一个单词是否已被next()方法返回

10.12文件对话框

JFileChooser类创建。构造方法JFileChooser()创建初始不可见的有模式文件对话框。

文件对话框调用下述两个方法:showSaveDialog(Component a);    提供保存文件时的界面

                                                        showOpenDialog(Component a);    提供打开文件时的界面

(参数a指定出现对话框出现的位置,取null时出现在屏幕正中央,不空则在组件a的正前面居中显示。)

对话框消失时,上述方法返回下列常量之一:JFileChooser.APPROVE_OPTION

                                                                                JFileChooser.CANCEL_OPTION

10.13带进度条的输入流

使用Javax.swing包提供的输入流类ProgressMonitorInpuStream

构造方法如下:

ProgressMonitorInputStream(Component c,String s,InputStream);

进度条在参数c指定的组件的正前方显示,若参数取null,则在屏幕正前方显示。

10.14文件锁

FileLock、FileChannel类处理Java提供的文件锁功能。它们分别在java.nio和java.nio.channels包中。

输入、输出流读写文件时可以使用文件锁。 

RondomAccessFile创建的流在读写文件时使用文件锁的步骤如下:

       (1)先使用RondomAccessFile流建立指向文件的流对象,该对象的读写属性必须是rw,例如:

      RandomAccessFile input=new          

                  RandomAccessFile("Example.java","rw");

(2)input流调用方法getChannel()获得一个连接到地层文件的FileChannel对象(信道),例如

      FileChannel channel=input.getChannel();

(3)信道调用tryLock()或lock()方法获得一个FileLock(文件锁)对象,这一过程也称作对文件加锁.

      例如:FileLock lock=channel.tryLock();
 

你可能感兴趣的:(201711671101 《Java程序设计》第十章学习总结)