201711671212 《JAVA程序设计》第十周学习总结

教材学习内容总结

本周学习内容:第10章 输入、输出流

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

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

3.File类的对象主要用于获取文件本身的一些信息。

  • 其构造方法有3个:
  • File(Stream filename);File(Stream directoryPath,String filename);File(File dir,Stream filename);
  • 其中,filename是文件名,directoryPath是文件的路径,dir为一个目录。使用File(Stream filename)创建文件时,该文件被认为与当前应用程序在同一目录中。

4.文件的属性

  • 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() 获取文件最后修改时间(时间是从1970年午夜至文件最后修改时刻的毫秒数)。

5.目录

(1)创建目录

  • File对象调用方法public boolean mkdir()创建目录,创建成功返回true,否则返回false(目录已存在返回false)。

(2)列出目录中的文件

  • public String[] list() 用字符串形式返回目录下的全部文件。
  • public File [] listFile() 用File对象形式返回目录下的全部文件。
  • 列出指定类型的文件:public String[] list(FilenameFilter obj),public File [] listFiles(FilenameFilter obj)
  • 上述两方法的参数FilenameFilter是一个接口,该接口有一个方法:

  • public boolean accept(File dir,String name);

6.文件的创建与删除

扫描二维码关注公众号,回复: 4530039 查看本文章
  • 使用File类创建一个文件对象。
  • 文件对象file调用方法public boolean createNewFile();

  • 文件对象调用方法  public boolean delete()可以删除当前文件,例如:file.delete()。

7.运行可执行文件

  • 用Runtime 类声明一个对象。
  • 用该类的getRuntime()静态方法创建这个对象:

  • ec=Runtime.getRuntime();

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

8.文字字节输入流

  • 使用输入流通常包括4个基本步骤:

  (1)设定输入流的源

  (2)创建指向源的输入流

  (3)让输入流读取源中的数据

  (4)关闭输入流。

  • 使用FileInputStream类的下列构造方法创建指向文件的输入流。
  • FileInputStream(String name);
  •  FileInputStream(File file);
  • 其中:参数name和file指定的文件称为输入流的源。
  • int read() 读取单个字节的数据,返回字节值(0~255整数),如果未读出字节就返回-1。

  • int read(byte b[]) 读取b.length个字节到字节数组b中,返回实际读取的字节数。如果到达文件的末尾,则返回-1。

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

9.文字输出流

  • 使用输出流通常包括4个基本步骤:

  (1)给出输出流的目的地

  (2)创建指向目的地的输出流

  (3)让输出流把数据写入到目的地

  (4)关闭输出流。

  • 使用FileOutputStream类的下列具有刷新功能的构造方法创建指向文件的输出流。

  • FileOutputStream(String name);

  • FileOutputStream(File file);

  • 其中:参数name和file指定的文件称为输出流的目的地

  • 输出流的wirie方法以字节单位向目的地写数据。

  •    void write(int n) 向目的地写入单个字节。

  •    void write(byte b[]) 向目的地写入一个字节数组。

  •    void write(byte b[],int off,int len) 从字节数组中偏移量off处取len个字节写到目的地。

  • 关闭流: 通过调用close()方法,可以保证操作系统把流缓冲区的内容写到它的目的地,即关闭输出流可以把该流所用的缓冲区的内容冲洗掉(通常冲洗到磁盘文件上)。

10.文件字符输入、输出流

  • Reader类提供的read方法以字符为单位顺序地读取源中的数据。

  • int read(); int read(char b[]); int read(char b[], int off, int len); void close();  long skip(long numBytes);

  •  Writer流以字符为单位顺序地写文件,每次调用write方法就顺序地向目的地写入内容。 

  • Writer类有如下常用的方法:

  1. void write(int n):  向输出流写入一个字符;

  2. void write(byte b[]):  向输出流写入一个字符数组。

  3. void write(byte b[],int off,int length):  从给定字符数组中起始于偏移量off处取len个字符写到输出流。

  4. void close():  关闭输出流。

11.缓冲流

  • BufferedReader和BufferedWriter类创建的对象称作缓冲输入、输出流。二者的源和目的地必须是字符输入流和字符输出流。 
  • 构造方法:BufferedReader(Reader in); BufferedWriter (Writer out);

  • BufferedReader和BufferedWriter类读写文件的方法:readLine() 读取文本行; write(String s,int off,int len) 把字符串s写到文件中 ; newLine(); 向文件写入一个回行符。

12.随机流

  • 使用RandomAccessFile类来创建一个随机访问文件流。

  • RandomAccessFile类创建的流的指向既可以作为源也可以作为目的地。    

  • 构造方法:RandomAccessFile(String name,String mode) ; RandomAccessFile(File file,String mode) ;

  • seek(long a)  定位RandomAccessFile流的读写位置 ; getFilePointer() 获取流的当前读写位置 ;

13.数组流

  • 字节数组输入流ByteArrayInputStream 作为流的源
  • 字节数组输出流ByteArrayOutputStream作为流的源目标。
  • ByteArrayInputStream构造方法及常用方法

  1.   ByteArrayInputStream(byte[] buf);
  2.   ByteArrayInputStream(byte[] buf,int offset,int length);
  3.   public int read();顺序地从源中读出一个字节
  4.   public int read(byte[] b,int off,int len);顺序地从源中读出参数len指定的字节数
  • ByteArrayOutputStream流构造方法及常用方法
  1.   ByteArrayOutputStream();

  2.   ByteArrayOutputStream(int size);

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

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

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

  • 字符数组:CharArrayReader和CharArrayWriter类是字符数组流,使用字符数组作为流的源和目标。

14.数据流

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

  • 构造方法:
  • DataInputStream(InputStream in)创建的数据输入流指向一个由参数in指定的底层输入流。DataOutputStream(OutnputStream out)创建的数据输出流指向一个由参数out指定的底层输出流。

15.对象流

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

  • 它的构造方法是:

  1.     ObjectInputStream(InputStream in)
  2.    ObjectOutputStream(OutputStream out)
  •  相关方法:

  1.      writeObject(Object obj) 将一个对象obj写入到一个文件
  2.     readObject() 读取一个对象到程序中 
  • 所谓序列化:一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。

16.序列化和对象克隆

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

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

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

17.使用Scanner解析文件

  • 使用Scanner类和正则表达式来解析文件。
  • 使用默认分隔标记解析文件

  1.       创建Scanner对象,并指向要解析的文件,例如:
  2.       File file = new File("hello.java");
  3.       Scanner sc = new Scanner(file);
  4.       sc将空白作为分隔标记
  • 相关方法

  1. next()依次返回file中的单词
  2. hasNext()判断file最后一个单词是否已被next()方法返回.
  3.  File file = new File("hello.java");
  4. Scanner sc = new Scanner(file);
  5. sc.useDelimiter(正则表达式);
  6. sc将正则表达式作为分隔标记
  7. 相关方法 next()    依次返回file中的单词
  8. hasNext() 判断file最后一个单词是否已被next()方法返回
  9. File file = new File("hello.java");
  10. Scanner sc = new Scanner(file);
  11. sc.useDelimiter(正则表达式);
  12. sc将正则表达式作为分隔标记
  13. 相关方法 :next() 依次返回file中的单词,hasNext() 判断file最后一个单词是否已被next()方法返回

18.文件对话框

  • 构造方法JFileChooser()创建初始不可见的有模式的文件对话框。
  • showSaveDialog(Component a);  showOpenDialog(Component a);

19.带进度条的输入流

  • 如果读取文件时希望看见文件的读取进度可以使用javax.swing包提供的输入流类:ProgressMonitorInputStream。

  • 它的构造方法是:ProgressMonitorInputStream(Conmponent c,String s,InputStream);

20.文件锁

  • 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();

猜你喜欢

转载自blog.csdn.net/Lum_0813/article/details/84848065