1 案例(重做)
案例1:将集合中的对象进行排序,排序完成之后存储到文件中。使用TreeSet集合
案例2:复制单级目录
copyFolder() copyFile()
案例3:复制多级目录
2 标准输入流和输出流(了解)
System.in:属于字节流,接收控制台输入的内容,使用方式如下:
方式1:Scanner sc=new Scanner(System.in);
方式2:BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out:属于字节流,将数据打印在控制台输出,使用方式如下
System.out.println(数据);
3 打印流(了解)
字节打印流:PrintStream
write(97)、print(97)以及println(97)的区别?
write(97); //a
print(97); //97
println(97); //97并且换行
字符打印流:PrintWriter
构造方法:
PrintWriter(String fileName):根据字符串类型的文件路径创建字符打印流对象,需要手动调用flush方法获取close方法刷新到文件中。
PrintWriter(Writer out, boolean autoFlush):创建字符打印流对象,需要一个Writer,参数2表示自动刷新。当调用println ,
printf ,或format方法时自动刷新。
成员方法:
public void println("字符串");
4 序列化流和反序列化流(了解)
序列化:将对象写到文件中。
反序列化:将文件中的对象读到内存中。
序列化流:ObjectOutputStream
构造方法:ObjectOutputStream(OutputStream out)
成员方法:void writeObject(Object obj) 将obj对象写到文件中
反序列化流:ObjectInputStream
构造方法:ObjectInputStream(InputStream in)
成员方法:Object readObject()
注意事项:
1、序列化的时候,对象需要实现一个Serializable标记型接口。
2、在反序列化的时候如果出现class文件中的serialVersionUID和保存对象的文件中的serialVersionUID不一致导致的InvalidClassException异常
解决办法:在Java类中固定serialVersionUID:private static final long serialVersionUID = 42L;
3、如果某个成员变量不想被序列化,那么使用transient修饰该成员变量
4、如果序列化了多个对象需要使用使用反序列化流while循环读对象,读到文件的末尾不是返回null,而是抛出一个EOFException异常
解决办法:
方式1:使用try...catch处理异常,不打印异常信息。
方式2:如果是需要将多个对象序列化到文件中,可以先将对象存到集合中,将集合序列化到文件中。(还是序列化一个对象)
5 Properties集合(重点*****)
概念:Properties是一个双列集合,实现了Map接口。
构造方法:
Properties properties=new Properties();
常规方法:
Object setProperty(String key, String value):根据key存value值,返回值是被替换的value。
String getProperty(String key):根据key获取对应的value值
Properties集合和IO结合(重点******)
将集合中的数据存到文件中:(了解)
void store(Writer writer, String comments):参数2comments表示添加的数据的描述信息,相当于注释。可以是null表示没有
将文件中的数据读到集合中(重点掌握******************)
void load(Reader reader):读取文件中的数据到集合中。
Properties集合在开发中的使用:(重点******)
作为配置文件使用:使用Properties加载配置文件中的数据,在程序中使用。
特殊:
1、将来的配置文件格式必须如下:
itheima003=林青霞
itheima001=张曼玉
itheima002=王祖贤
2、配置文件的后缀名不叫txt,一般是.properties结尾,这种文件在开发中成为属性文件。