IO流
Try catch处理异常(JDK9后)
try(流;){
}catch(){
}
则不需要添加finally中执行close()方法关闭流
Properties 集合
唯一和IO流相结合的集合,可以使用store()方法,把集合中的临时数据持久化的写入到硬盘中存储
(操作字符串)
setProperty(String,String)
getProperty(String,String) 不使用put()方法
Set<String> set=pro.stringPropertyNames();
//使用stringPropertyNames把properties集合中的键取出,存储到一个Set集合中
void store(OutputStream out,String comments)
void store(Writer writer,String comments)
/*
可以使用Properties集合中方法store把集合中的临时数据,持久化写入到硬盘中存储
String comments :注释
//不能用中文,会产生乱码,编码格式默认Unicode。一般使用" "空字符串
*/
字符流
字符流load()装载
//字节流使用的话会出现乱码
public static void main(String[]args){
//1.创建Properties对象
Properties prop=new Properties();
//2.使用Properties集合对象中的方法load读取保存键值对的文件
prop.load(new FileReader("文件路径"));
//遍历Properties集合
Set<String> set=prop.stringPropertyNames();
for(String key:set){
String value=prop.getProperty(key);
System.out.println(key+"="+value); //在数据中的字符前面加#会将其注释不进行输出
}
}
缓冲流
是对四个基本的F ileXXXX流的增强,所以也是四个流
BufferedOutputStream 四个步骤:
1.先创建一个OutputStream对象
2.将OutputStream对象放在BufferedOutputStream缓冲流中,提高效率
3.使用writer()方法,把数据写入内存缓冲区
4.用flush()方法,把缓冲区内容写入文件
5.close()释放流.。 //释放的时候会把缓冲区内容写入文件,所以第四步可以省略
//BufferedInputStream 同理
字符缓冲流:
void newLine(); //可以根据不同的操作系统,换行
split(?);//根据方法里的值进行分割
FileReader读取Windows系统默认的GBK文件会产生乱码
转换流
InputStreamReader
是字节流通向字符流的桥梁,可将其转换为字符流的桥梁,它使用指定的charset读取字节将其转换为字符
OutputStreamReader
GBK-----2个字节存储一个中文 UTF-8 -------3个字节存储一个中文
OutputStreamWriter(OutputStream out )创建使用默认编码的OutputStreamWrite
OutputStreamWriter(OutputStream out ,String charsetName)创建使用字符集的OutputStreamWriter
String charsetName指定的编码表名称,不区分大小写,不知道默认是utf-8;
ObjectOutputStream
序列化与反序列化的概述:
把对象以流的方式写入到文件中的保存叫做序列化,把文件中的文件以流的方式读出来也叫对象的反序列化
反序列化的前提:
1.类必须实现Serializable
2.必须存在类对应的class文件
ObjectInptuStream ois=new ObjectInputStream(new FileInputStream("路径"));
Object o=ois.readObject();
ois.close();
System.out.println(o);
类名 p=(Person) o;
System.out.println();//属性看着输出.
成员变量是不能被序列化的,被序列化的都是对象
transient:若不想成员被序列化,则可以用其修饰(瞬态关键字)
PrintStream:打印流
只能输出不能输入,不会输出IOException,有其特有的方法
System.setOut(new PrintSteam(“路径”));//把输出语句的目的地改为打印流的目的地
PrintWriter:
-
封装了print() / println()方法,支持写入后换行。
-
支持数据原样打印。
public class TestPrintWriter { public static void main(String[] args) throws Exception { //1创建打印流 PrintWriter pw=new PrintWriter("d:\\print.txt"); //2打印 pw.println(97); pw.println(true); pw.println(3.14); pw.println('a'); //3关闭 pw.close(); System.out.println("执行完毕"); } }
转换流:InputStreamReader/OutputStreamWriter
-
可将字节流转换为字符流。
-
可设置字符的编码方式。
public class TestInputStreamReader { public static void main(String[] args) throws Exception { //1创建InputStreamReader对象 FileInputStream fis=new FileInputStream("d:\\write.txt"); InputStreamReader isr=new InputStreamReader(fis, "gbk"); //2读取文件 int data=0; while((data=isr.read())!=-1) { System.out.print((char)data); } //3关闭 isr.close(); } }
public class TestOutputStreamWriter { public static void main(String[] args) throws Exception{ //1创建OutputStreamWriter FileOutputStream fos=new FileOutputStream("d:\\info.txt"); OutputStreamWriter osw=new OutputStreamWriter(fos, "utf-8"); //2写入 for(int i=0;i<10;i++) { osw.write("我爱北京,我爱故乡\r\n"); osw.flush(); } //3关闭 osw.close(); System.out.println("执行成功"); } }
-
File类
概念:代表物理盘符中的一个文件或者文件夹。
常见方法:
方法名 | 描述 |
---|---|
createNewFile() | 创建一个新文件。 |
mkdir() | 创建一个新目录。 |
delete() | 删除文件或空目录。 |
exists() | 判断File对象所对象所代表的对象是否存在。 |
getAbsolutePath() | 获取文件的绝对路径。 |
getName() | 取得名字。 |
getParent() | 获取文件/目录所在的目录。 |
isDirectory() | 是否是目录。 |
isFile() | 是否是文件。 |
length() | 获得文件的长度。 |
listFiles() | 列出目录中的所有内容。 |
renameTo() | 修改文件名为。 |
FileFilter接口
FileFilter:文件过滤器接口
- boolean accept(File pathname)。
- 当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中。