第10章 输入、输出流
File对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。
创建一个File对象的构造方法有3个:
- –File(String filename);
- –File(String directoryPath,String filename);
- –File(File f, String filename);
File类的下列方法获取文件本身的一些信息。
- –public String getName() 获取文件的名字。
- –public boolean canRead() 判断文件是否是可读的。
- –public boolean canWrite() 判断文件是否可被写入。
- –public boolean exits() 判断文件是否存在。
- –public long length() 获取文件的长度(单位是字节)。
- –public String getAbsolutePath() 获取文件的绝对路径。
- –public String getParent() 获取文件的父目录。
- –public boolean isFile() 判断文件是否是一个普通文件,而不是目录。
- –public boolean isDirectroy() 判断文件是否是一个目录。
- –public boolean isHidden() 判断文件是否是隐藏文件。
- –public long lastModified() 获取文件最后修改的时间。
1.创建目录 public boolean mkdir()
2.列出目录中的文件
- –public String[] list() 用字符串形式返回目录下的全部文件。
- –public File [] listFiles() 用File对象形式返回目录下的全部文件。
- –public String[] list(FilenameFilter obj) 用字符串形式返回目录下的指定类型的所有文件。
- –public File [] listFiles(FilenameFilter obj) 用File对象形式返回目录下的指定类型所有文件。
用Runtime 类声明一个对象( Runtime类在java.lang包)
Runtime ec;
然后使用该类的getRuntime()静态方法创建这个对象:
ec=Runtime.getRuntime();
ec可以调用exec(String command)方法打开本地机的可执行文件或执行一个操作。
10.2 文件字节输入流
- InputStream抽象类的子类创建的流对象称作字节输入流
- OutputStream抽象类的子类创建的流对象称作字节输出流
- Reader抽象类的子类创建的流对象称作字符输入流
- Writer抽象类的子类创建的流对象称作字符输出流
使用输入流通常包括4个基本步骤:
- (1)设定输入流的源
- (2)创建指向源的输入流
- (3)让输入流读取源中的数据
- (4)关闭输入流。
构造方法:设定输入流源
- FileInputStream(String name);
- FileInputStream(File 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指定从字节数组的某个位置开始存放读取的数据。
10.3 文件字节输出流
使用输出流通常包括4个基本步骤:
- 给出输出流的目的地
- 创建指向目的地的输出流
- 让输出流把数据写入到目的地
- 关闭输出流
构造方法FileOutputStream类
- FileOutputStream(String name)
- FileOutputStream(File file)
使用输出流写字节
- void write(int n) 向目的地写入单个字节
- void write(byte b[]) 向目的地写入一个字节数组
- void write(byte b[],int off,int len) 从字节数组中偏移量off处取len个字节写到目的地
10.4 文件字符输入、输出流
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(): 关闭输出流。
10.5 缓冲流
BufferedReader和BufferedWriter类创建的对象称作缓冲输入、输出流
构造方法:
- –BufferedReader(Reader in);
- –BufferedWriter (Writer out);
BufferedReader和BufferedWriter类读写文件的方法:
- –readLine() 读取文本行
- –write(String s,int off,int len) 把字符串s写到文件中
- –newLine(); 向文件写入一个回行符
10.6 随机流
使用RandomAccessFile类来创建一个随机访问文件流
构造方法:
- –RandomAccessFile(String name,String mode)
- –RandomAccessFile(File file,String mode)
相关方法:
- –seek(long a) 定位RandomAccessFile流的读写位置
- –getFilePointer() 获取流的当前读写位置
10.7 数组流
字节数组输入流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(); 返回输出流写入到缓冲区的全部字节
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() 读取一个对象到程序中
10.12 文件对话框
构造方法JFileChooser()创建初始不可见的有模式的文件对话框。然后文件对话框调用下述2个方法:
- – showSaveDialog(Component a);
- – showOpenDialog(Component a);
总结
- File类及各种方法的使用。
- InputStream的子类创建的对象称为字节输入流,字节输入流按字节读取源”的数据。
- OutputStream的子类创建的对象称为字节输出流。字节输出流按字节将数据写入输出流指向的目的地。
- Reader的子类创建的对象称为字符输入流,字符输入流按字符读取源中的数据。
- Writer的子类创建的对象称为字符输出流。字符输出流按字符将数据写入输出流指向的目的地。
- 使用对象流写入或读入对象时,要保证对象是序列化的。