教材学习内容总结
本周学习内容:第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.文件的创建与删除
- 使用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类有如下常用的方法:
-
void write(int n): 向输出流写入一个字符;
-
void write(byte b[]): 向输出流写入一个字符数组。
-
void write(byte b[],int off,int length): 从给定字符数组中起始于偏移量off处取len个字符写到输出流。
-
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构造方法及常用方法
- 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(); 返回输出流写入到缓冲区的全部字节
- 字符数组:CharArrayReader和CharArrayWriter类是字符数组流,使用字符数组作为流的源和目标。
14.数据流
-
DataInputStream和DataOutputStream类创建的对象称为数据输入流和数据输出流。
- 构造方法:
- DataInputStream(InputStream in)创建的数据输入流指向一个由参数in指定的底层输入流。DataOutputStream(OutnputStream out)创建的数据输出流指向一个由参数out指定的底层输出流。
15.对象流
-
ObjectInputStream和ObjectOutputStream类创建的对象称为对象输入流和对象输出流。
-
它的构造方法是:
- ObjectInputStream(InputStream in)
- ObjectOutputStream(OutputStream out)
-
相关方法:
- writeObject(Object obj) 将一个对象obj写入到一个文件
- readObject() 读取一个对象到程序中
-
所谓序列化:一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象。
16.序列化和对象克隆
-
如果一个“复制品”实体的变化不会引起原对象实体发生变化,反之亦然。这样的复制品称为原对象的一个克隆对象或简称克隆。
-
一个对象调用clone()方法就可以获取该对象的克隆对象。
-
对象输入流通过对象的序列化信息来得到当前对象的一个克隆。
17.使用Scanner解析文件
- 使用Scanner类和正则表达式来解析文件。
-
使用默认分隔标记解析文件
- 创建Scanner对象,并指向要解析的文件,例如:
- File file = new File("hello.java");
- Scanner sc = new Scanner(file);
- sc将空白作为分隔标记
-
相关方法
- next()依次返回file中的单词
- hasNext()判断file最后一个单词是否已被next()方法返回.
- File file = new File("hello.java");
- Scanner sc = new Scanner(file);
- sc.useDelimiter(正则表达式);
- sc将正则表达式作为分隔标记
- 相关方法 next() 依次返回file中的单词
- hasNext() 判断file最后一个单词是否已被next()方法返回
- File file = new File("hello.java");
- Scanner sc = new Scanner(file);
- sc.useDelimiter(正则表达式);
- sc将正则表达式作为分隔标记
- 相关方法 :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();