序列化流:
用于向流中写入对象的操作流 ObjectOutputStream
反序列化:
用于从流中读取对象的操作流 ObjectInputStream
import java.io.Serializable;
public class Person implements Serializable{
private String name; private static int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }}
public class Demo01 {
public static void main(String[] args) throws IOException, ClassNotFoundException { //write(); read(); } //序列化 public static void write() throws IOException { // 序列前提:要序列化的类必须实现Serializable接口 //静态不能序列化 // 目的地 FileOutputStream fos = new FileOutputStream("D:\\java\\person.txt"); // 创建对象 Person p = new Person("zhangsan", 18); // 创建序列化流 ObjectOutputStream oos = new ObjectOutputStream(fos); // 将person对象写入文件中 oos.writeObject(p); // 释放资源 oos.close(); } //反序列化 public static void read() throws ClassNotFoundException, IOException{ //数据源 FileInputStream fis=new FileInputStream("D:\\java\\person.txt"); //创建反序列化流 ObjectInputStream ois=new ObjectInputStream(fis); //将文件中的对象读到person对象中 Person p=(Person)ois.readObject(); System.out.println(p); //释放资源 ois.close(); }}通过在流中使用文件可以实现对象的持久存储。
Serializable标记接口给需要序列化的类,提供了一个序列版本号。serialVersionUID. 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。
public class Person implements Serializable{
//给类显示声明一个序列版本号
private static final long serialVersionUID = 1L;
//瞬态关键字transient private String name; private static int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }}瞬态关键字transient:
当一个类的对象需要被序列化时,某些属性不需要被序列化,这时不需要序列化的属性可以使用关键字transient修饰。只要被transient修饰了,序列化时这个属性就不会序列化了。
静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化。
public class Person implements Serializable{
private static final long serialVersionUID = 1L; //瞬态关键字transient private transient String name; private static int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }}打印流:
打印流是输出信息最方便的类,注意包含字节打印流PrintStream和字符打印流:PrintWriter。打印流提供了非常方便的打印功能,
可以打印任何类型的数据信息,例如:小数,整数,字符串。
在这个类中定义了很多print()和println()方法,System.out.print()方法可以打印任何数据类型。
构造方法:
public PrintStream(OutputStream out) --指定输出位置
此构造方法接收OutputStream的子类,
打印流好处:
通过定义的构造方法可以发现,有一个构造方法可以直接接收OutputStream类的实例,与OutputStream相比起来,PrintStream可以更方便的输出数据,
相当于把OutputStream类重新包装了一下,使之输出更方便。
public static void main(String[] args) throws FileNotFoundException {
//目的地 //开启续写功能 FileOutputStream fos=new FileOutputStream("D:\\java\\a.txt",true);//开启文件自动刷新写入功能//开启自动刷新功能
PrintWriter pw=new PrintWriter(fos,true); //向文件中写入字符串 pw.print(100); pw.println("bbbb"); pw.print("cccc"); //释放资源 pw.close(); }Commons工具类:
加入classpath的第三方jar包内的class文件才能在项目中使用
创建lib文件夹
将commons-io.jar拷贝到lib文件夹
常用方法:
getExtension(String path):获取文件的扩展名;
getName(String filename):获取文件名;
isExtension(String fileName,String ext):判断fileName是否是ext后缀名;
右键点击commons-io.jar,Build Path→Add to Build Path
public static void main(String[] args) {
//获取文件拓展名 String ext=FilenameUtils.getExtension("D:\\java\\a.txt"); System.out.println("拓展名为"+ext); //获取文件名 String fname=FilenameUtils.getName("D:\\java\\a.txt"); System.out.println("文件名为"+fname); //判断拓展名 boolean flag=FilenameUtils.isExtension("D:\\java\\a.txt", "txt"); System.out.println(flag); }运行结果:
FileUtils工具类:
提供文件操作(移动文件,读取文件,检查文件是否存在等等)的方法
常用方法:
readFileToString(File file):读取文件内容,并返回一个String;
writeStringToFile(File file,String content):将内容content写入到file中;
copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制
copyFile(File srcFile,File destFile);文件复制
public static void main(String[] args) throws IOException {
//write(); //copydir(); copys(); } public static void read() throws IOException{ File file=new File("D:\\java\\a.txt"); String content=FileUtils.readFileToString(file); System.out.println(content); } public static void write() throws IOException{ //目的地 File file=new File("D:\\java\\a.txt"); FileUtils.writeStringToFile(file, "你好吗",true); } //复制文件夹 public static void copydir() throws IOException{ //数据源 File src=new File("D:\\java"); //目的地 File dest=new File("D:\\java2"); //开始复制 FileUtils.copyDirectoryToDirectory(src, dest); } //复制文件 public static void copys() throws IOException{ File file=new File("D:\\java\\b.txt"); File f=new File("D:\\java\\bb.txt"); FileUtils.copyFile(file, f); }