Java IO
什么是IO
I---->input 从文件中读取数据
O—>output 向目标写入数据
在编程中:无论是文件还是文件夹,都是文件
File文件操作类
java.io包下
作用:将具体的文件映射到内存中
构造方法:
File file = new FIle(String path);
path是文件的路径
文件路径:
相对路径:一般是从某个特定的目录开始的路径
绝对路径:从盘符开始的路径
常用方法:
length() 获取文件的大小,返回文件的字节数 long类型
getName() 获取文件的名称
list() 列出目录下的所有文件,包括文件夹
getPath() 获取文件的相对路径
getAbsolutePath() 获取文件的绝对路径
getParent() 获取上一级目录
getLastModified() 获取最后一次修改的时间
delete() 删除文件
exists() 判断文件是否存在
mkdir() 创建不存在的目录
mkdirs() 创建不存在的多级目录
isDirectory() 判断是否是一个目录
isFile() 判断是否是一个文件
Properties类
获取系统所有的配置信息
Properties prop = System.getPropertier();
System.getenv();获取系统的环境变量
System.get(“JAVA_HOME”); 获取指定的系统环境变量
IO的基本工作原理
流
字节流:Stream结尾 ------- 最基本、按字节处理
字符流:Reader、Writer结尾
装饰流:包装流、处理流,用于提高字节字符流的读写效率
字符流
FileReader 字符输入流
java.io包
构造方法:
FileReader(File file); //参数 文件对象
FileReader(String name);//参数 文件路径
常用方法:
read(char[] cbuf,int off,int length); //将字符数组中的字符读入,off为开始位置,length为读取的长度 若
close(); //关闭输入流
使用:File file = new File("data/test.txt"); //创建文件对象 FileReader reader = new FileReader(file); //创建输入流 char[] chars = new char[1024]; //定义一次读取的字符数组大小 int len = -1; while(true){ len = reader.read(chars,0,chars.length); //将读取的长度返回给len,当返回-1时,说明文件读取完毕 if(len==-1){ break; } for(int i=0;i<len;i++){ System.out.print(char[i]); //打印读取的字符 } } reader.close();
FileWriter字符输出流
java.io包
构造方法:
FileWriter(File file); //参数 文件对象
FileWriter(String name); //参数 文件路径
常用方法:
write(char[]cubf,int off, int len) 从第off个元素开始写入,一共写入len个元素
flush() 刷新输出流缓存到文件中
close() 关闭输出流
使用:Scanner input = new Scanner(System.in); FileWriter writer = new FileWriter("data/test.txt"); //创建输出流 String str = input.sextLine(); writer.write(str); //输出str字符串 writer.flush(); //清除缓存 writer.close(); //关闭输出流
字节流
FileInputStream字节输入流
java.io包
构造方法:
FileInputStream(File file); //参数 文件对象
FileInputStream(String name); //参数 文件路径
常用方法:
close();关闭字节输入流
read(byte[]b,int off,int len); 将数据读取到字节数组中,可以指定开始位置和长度
skip(long n); 跳过n个字节,然后开始读取
FileOutputStream字节输出流
java.io包
构造方法:
FileOutputStream(File file); //参数 文件对象
FileOutputStream(String name);//参数 文件路径
常用方法:
close();
flush();
write(byte[]);
装饰流
作用:
实现一些特殊的功能需求
加快文件读写的速度
字符流中的装饰流
BufferedReader/BufferedWriter
FilterReader/FilterReader
InputStreamReader/OutputStreamWriter -------将字节流包装成字符流
LineNumberReader
可以按行读取数据
可以获取行号
方法:
close()
read()
read(char[] cubf,int off,int len)
skip(long n) //这些方法和FileReader功能一样
特有方法:
readLine() //读取一行数据
getLineNumber() //获取行号
字节流中的装饰流
LineNumberInputStream 按行读取字节数据
ObjectInputStream/ObjectOutputStream
可以直接对一个对象进行读取/写入操作
注意:需要写入和读取的对象类必须要实现Serializable接口
DataInputStream/DataOutputStream 可以执行数据转换