- java.io.File
java程序通过java.io.File类来访问文件属性,通过File类构造文件对象从而控制屋里文件或目录,操作文件或目录的属性(路径、权限、日期和时间等),java.io.File代表系统文件名
public File(String pathName) 以pathName为路径创建File对象,如果pathName是相对路径,则默认的当前路径再系统属性user.dir 中存储 public File(String parent,String child) 以parent为父路径,以parent为子路径创建File对象 通过File对象可以访问文件的属性
String sepatetor 存储了当前系统的路径分隔符 public boolean canRead() 测试应用程序是否可以读取这个抽象的路径表示的文件 public boolean canWrite() 测试应用程序是否可以修改这个抽象的路径表示的文件 public boolean exists() 测试这个抽象的路径表示的文件或目录是否存在 public boolean isDirectory() 测试这个抽象的路径表示的文件是不是目录 public boolean isFile() 测试这个抽象的路径表示的文件是不是普通文件 public boolean isHidden() 测试这个以抽象路径命名的文件是否隐藏的 public long lastModified() 返回这个抽象的路径表示的文件的最后修改时间 public long length() 返回这个抽象的路径表示的文件的长度 public String getName() 返回这个抽象的路径表示的文件或目录的名字 public String getPath() 将这个抽象路径转换成路径字符串并返回 通过File对象操作文件或目录(在该对象所指的文件或目录不存在的情况下)
public boolean createNewFile()throws IOException 当且仅当以这个名字为名的文件还不存在的时候以这个抽象路径命名自动创建一个的新的空的文件 public boolean delete() 删除这个抽象的路径表示的文件或目录 public boolean mkdir() 创建以这个抽象路径命名的目录 public boolean mkdirs() 创建以这个抽象路径命名的目录,包括任何需要的不存在的父目录 public boolean renameTo(File newFile) 对这个抽象路径表示的文件重命名 public setLastModified(long time) 设定这个抽象路径名表示的文件或目录的最后修改时间 public setReadable(boolean readable) 设定对这个抽象路径表示的文件的拥有者读权限的方便方法 public setReadOnly() 标记用这个抽象路径表示的文件或目录,这样只有读操作才被允许 public setWriteable(boolean writeable) 设定对这个抽象路径表示的文件的拥有者写权限的方便方法 public String[] list() 返回用一个命名了这个抽象路径表示的目录(只能是目录,文件则返回null)中的文件和目录的字符串数组 public File[] listFiles() 返回一个表示由这个抽象路径表示的目录中文件的抽象路径的数组
- java流式输入/输出原理
在Java程序中,对于数据的输入/输出操作以“流(Stream)”方式进行;
JDK提供了各种各样的“流”类,用以获取不同种类的数据;
程序中通过标准的方法输入/输出数据
流”是一种能生成或接受数据的、代表数据的源和目标的对象。
流是指一连串流动的数据序列,是以先进先出方式发送信息的通道
Java流的分类:
按数据流的方向不同可以分为输入流和输出流;
按处理数据单位不同可以分为字节流和字符流;
按照功能不同可以分为节点流和处理流;
JDK所提供的所有流类型位于包java.io内部分别继承自以下四种抽象流类型;![]()
字节输入流InputStream:继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8位);下图中继承自InputStream的节点流和处理流(深色底纹的是节点流,无底纹的是处理流)![]()
字节流输入流InputStream的基本方法:
int read() throws IOException 读取一个字节并以整数形式返回(0-255),到达末尾返回-1 int read(byte[] buffer)throws IOException 读取一系列字节并存储到数组buffer,返回实际读取字节数 int read(byte[] buffer,int offset,int length) throws IOException 读取最多length字节的数据到从buffer[offset]开始的字节数组中,返回实际读取字节数 int available() throws IOException 返回未读字节数 void close()throws IOException 关闭流释放内存资源 long skip(long n)throws IOException 跳过n个字节不读,返回实际跳过的字节数 字节输出流OutputStream:继承自OutputStream的流是用于从程序中输出数据,且数据的单位为字节(8位)下图是继承自OutputStream的节点流和处理流(深色底纹的是节点流,无底纹的是处理流)
![]()
字节输出流OutputStream的基本方法
void write(int b)throws IOException 向输出流中写入一个字节数据,该字节数据为参数b的低8位 void write(byte[] b)throws IOException 将一个字节数组中的数据写入数据流 void write(byte[] b,int off,int len)throws IOException 将字节数组b中从off到off+len的数据写到输出流中 void close()throws IOException 关闭流释放内存资源 void flush()throws IOException 将输出流中缓冲的数据全部写到目的地 字符输入流Reader:继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16位) ;下图中深色为节点流,浅色为处理流
![]()
字符输入流Reader的基本方法:
int read()throws IOException 读取一个字符并以整数的形式返回(0-65535),如果达到输入流末尾返回-1 int read(char[] cbuf)throws IOException 读取一系列字符并存储到字符数组cbuf,若读取前已达到输入流的末尾返回-1 int read(char[] cbuf,int offset,int len)throws IOException 读取一系列字符并存储到字符数组cbuf从offset开始的len个位置中,返回读取的字符数 void close()throwsIOException 关闭流释放内存资源 long skip(long n)throws IOException 跳过n个字符不读,返回实际跳过的字符数 字符输出流Writer:继承自Writer的流都是用于从程序中输出数据,且数据单位为字符(16位)下图中深色为节点流,浅色为处理流
![]()
字符输出流Writer的基本方法
void write(int c)throws IOException 向一个输出流中写入一个字符数据,该字符数据为参数c的低16位 void write(char[] cbuf)throws IOException 讲一个字符型数组中的数据写入输出流 void write(char []cbuf,int offset,int len)throws IOException 将字符数组中从offset开始的len个字符写到输出流 void write(String str)throws IOException 将一个字符串中的字符写入到输出流 void write(String str,int off,int len)throws IOException 将字符串中从off开始的len个字符写到输出流 void close()throws IOException 关闭流释放内存资源 void flush()throws IOException 将输出流中缓冲的数据全部写出到目的地 节点流:和具体数据存放地相关联的流,可以从一个特定的数据源(节点)读写数据(如:文件、内存、管道等)。
![]()
文件的顺序读写:
FileInputStream和FileOutputStream、FileReader和FileWriter用来进行文件I/O处理,由它们所提供的方法可以打开本地主机上的文件,并进行顺序的读/写;
输入流构造方法: FileInputStream / FileReader
File******(File file) File******(String name)
输出流构造方法: FileOutputStream / FileWriter
File******(File file) File******(String name) File******(File file, boolean append) File******(String name, boolean append)
抛出异常:FileNotFoundException
用FileInputStream 读文本文件:
引入相关的类import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.FileInputStream;
构造一个文件输入流对象
InputStream fis = new FileInputStream(“text.txt”);
利用文件输入流类的方法读取文本文件的数据
fis.available(); //可读取的字节数,是当前剩余可读取的字节数,随着read的进行,指针会向后移动,所以要计算文件的大小就应该在read之前调用此函数。
fis.read(); //读取文件的数据
关闭文件输入流对象
fis.close();
用FileOutputStream写文本文件:
引入相关的类import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.OutputStream;
import java.io.FileOutputStream;
构造一个文件输出流对象
OutputStream fos= new FileOutputStream(“text.txt”);//文件不存在的话会自动创建一个新文件
利用文件输出流类的方法读取文本文件的数据
String str = "good good study,day day up";
Byte[] words = str.getByte();
fos.write(words,0,words.length);
关闭文件输入流对象
fos.close();
处理流:“套接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。![]()
过滤流:
过滤流在读/写数据的同时可以对数据进行处理,它提供了同步机制,使得某一时刻只有一个线程可以访问一个I/O流,以防止多个线程同时对一个I/O流进行操作所带来的意想不到的结果。
类FilterInputStream和FilterOutputStream分别作为所有过滤输入流和输出流的父类。
public class FilterInputStream extends InputStream
public class FilterOutputStream extends OutputStream
为了使用一个过滤流,必须首先把过滤流连接到某个输入/出流上,通常通过在构造方法的参数中指定所要连接的输入/出流来实现。例如:
FilterInputStream( InputStream in );
FilterOutputStream( OutputStream out );
非面向设备的流