io流

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