Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。
File对象
File file = new File(String pathname);
//文件内容字节长度
file.length();
//判断file对象是否为文件
file.isFile();
//判断file对象是否为文件夹
file.isDirectory();
//判断file对象是否存在
file.exists();
//获取file对象的名字
file.getName();
//获取file对象下的子文件夹(获取内容为数组)
file.listFiles();
//获取file对象的绝对路径
file.getAbsolutePath();
......
创建方法
file.createNewFile();
//指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false。
file.mkdir();
//在指定位置创建一个单级文件夹。
file.mkdirs();
//在指定位置创建一个多级文件夹。
file.renameTo(File dest);
//如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名,
//如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹。
删除方法
file.delete() 删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值。
file.deleteOnExit()jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。
判断方法
file.exists();
//文件或文件夹是否存在。
file.isFile();
//是否是一个文件,如果不存在,则始终为false。
file.isDirectory();
//是否是一个目录,如果不存在,则始终为false。
file.isHidden() ;
//是否是一个隐藏的文件或是否是隐藏的目录。
file.isAbsolute();
//测试此抽象路径名是否为绝对路径名。
获取方法
file.getName();
//获取文件或文件夹的名称,不包含上级路径。
file.getAbsolutePath();
//获取文件的绝对路径,与文件是否存在没关系
file.length();
//获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
file.getParent();
//返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
file.lastModified();
//获取最后一次被修改的时间。
字节流
字节流主要操作byte类型数据,以byte数组为准,主要操作类是InputStream类和OutputStream类。
1、字节流基础类
1)字节输出流:OutputStreame
OutputStream是整个IO包中字节输出流最大的父类,此类的定义如下:
//public abstract class OutputStream implements Closeable, Flushable {}
从这个定义中可以发现,OutputStream类是一个抽象类,它的常用方法:
// 将 b.length 个字节从指定的 byte 数组写入此输出流
void write(byte[] b)
// 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
void write(byte[] b, int off, int len)
// 将指定的字节写入此输出流
abstract void write(int b)
// 关闭此输出流并释放与此流有关的所有系统资源
void close()
// 刷新此输出流并强制写出所有缓冲的输出字节
void flush()
InputStream是整个IO包中字节输入流最大的父类,此类的定义如下:
//public abstract class InputStream extends Object implements Closeable {}
从这个定义中可以发现,InputStream类也是一个抽象类,它的常用方法:
public int availabel() throws IOException //可以取得输入文件的大小
public void close() throws IOException //关闭输入流
public abstract int read() throws IOException //读取内容,以数字方式读取
public int read(byte[] b) throws IOException //将内容读到byte数组中同时返回读入的个数
2、字节文件操作流
FileInputStream:字节文件输入流,从文件系统中的某个文件中获得输入字节,用于读取诸如图像数据之类的原始字节流。
构造方法:
// 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定
FileInputStream(File file)
// 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径name指定
FileInputStream(String name)
FileOutputStream:字节文件输出流是用于将数据写入到File,从程序中写入到其他位置。
构造方法:
// 创建一个向指定File对象表示的文件中写入数据的文件输出流
FileOutputStream(File file)
// 创建一个向指定File对象表示的文件中写入数据的文件输出流
FileOutputStream(File file, boolean append)
// 创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream(String name)
// 创建一个向具有指定name的文件中写入数据的输出文件流
FileOutputStream(String name, boolean append)
字节缓冲流(高效流)
BufferedInputStream:字节缓冲输入流,提高了读取效率。
构造方法:
// 创建一个 BufferedInputStream并保存其参数,即输入流in,以便将来使用。
BufferedInputStream(InputStream in)
// 创建具有指定缓冲区大小的 BufferedInputStream并保存其参数,即输入流in以便将来使用
BufferedInputStream(InputStream in, int size)
BufferedOutputStream:字节缓冲输出流,提高了写出效率。
构造方法:
// 创建一个新的缓冲输出流,以将数据写入指定的底层输出流
BufferedOutputStream(OutputStream out)
// 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流
BufferedOutputStream(OutputStream out, int size)
常用方法:
// 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流
void write(byte[] b, int off, int len)
// 将指定的字节写入此缓冲的输出流
void write(int b)
// 刷新此缓冲的输出流
void flush()
字符流
1、Reader,字符输入流类都是Reader的子类,Reader类是一个抽象类,方法与InputStream类类似。
方法:
方法 | 作用 |
---|---|
int read() | 读取并返回一个读取的字节,如果已经到达文件末尾,返回-1 |
int read(char[] b) | 批量读取,读取最大b.length个字符到b数组,如果已经到达文件末尾,返回-1 |
int read(char[] b,int off,int len) | 批量读取,读取最大len个字符到b数组,偏移量为off,如果已经到达文件末尾,返回-1 |
int skip(int n) | 跳过并丢弃n个字节,返回实际跳过的字节数 |
close() | 关闭流 |
读取文件内容示例:
public static void main(String[] args) {
File file = new File("D:\\java.txt");
reader(file);
}
/**
* 读取文件内容
* @param file
*/
public static void reader(File file) {
Reader read = null; //声明Reader对象
char[] c = new char[(int)file.length()]; //根据文件大小定义数组
try {
read = new FileReader(file); //使用FileReader实例化Reader
read.read(c); //读取内容到数组
read.close();
}catch(IOException e) {
System.out.println("读取失败");
e.printStackTrace();
}
System.out.println(c);
}
2、Writer,Writer类和OutputStream类,在功能上是一致的,但两者前者写入的是字符,后者写入的是字节,Writer本身也是一个抽象类。
方法:
方法 | 作用 |
---|---|
append(char c) | 将指定的字符c添加到输出流中 |
write(int c) | 向输出流写入一个字节 |
write(char[]) x,int off,int len) | 将字符数组内的数据写到输出流x中,off为偏移量,len为写入的长度 |
write(String str) | 向输出流写入一个字符串 |
write(String str, int off, int len) | 向输出流写入一个字符串,off为偏移量,len为写入的长度 |
flush() | 将数据刷进磁盘,刷新内核缓冲区 |
close() | 关闭流 |
向文件写入内容示例:
/**
* 向文件写入内容
* @param file
*/
public static void writer(File file) {
String str = "java";
char[] c = str.toCharArray(); //将字符串转换为char数组
try {
Writer writer = new FileWriter(file); //实例化对象
writer.write(c); //写入数据
writer.close();
System.out.println("写入成功");
}catch(IOException e) {
System.out.println("写入失败");
e.printStackTrace();
}
}