接上篇:Java-IO流文件操作,编码转换_郑*杰的博客-优快云博客
注意事项,如代码注释
import java.io.Serializable;
//对象想被序列化,需要继承Serializable接口
public class Student implements Serializable {
public static final long serialVersionUID = 1; // 版本号,序列化前后版本号需要保持一致,如果反序列化因版本号失败,重新序列化一次即可
private String name;
// 某个字段不想被序列化,加transient
private transient String sex;
private int age;
public Student(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
序列化操作
import java.io.*;
public class ObjectOutstreamdemo {
public static void main(String[] args) throws Exception {
Student s = new Student("小明","男" , 10);
OutputStream out = new FileOutputStream("file-io-serialization\\obj.txt");
ObjectOutputStream objectout = new ObjectOutputStream(out);//使用对象输出流包装原始流
objectout.writeObject(s);
objectout.close();
System.out.println("序列化成功");
//反序列化同理
InputStream in = new FileInputStream("file-io-serialization\\obj.txt");
ObjectInputStream objectin = new ObjectInputStream(in);
Student ss = (Student) objectin.readObject();
System.out.println(ss);
objectin.close();
System.out.println("反序列化成功");
}
}
打印流,写入数据最高效方便
import java.io.*;
public class Printsteamdemo {
public static void main(String[] args) throws Exception {
PrintStream ps = new PrintStream("file-io-serialization/write.txt");
PrintStream ps2 = new PrintStream(new FileOutputStream("file-io-serialization/write.txt",true));
PrintWriter ps1 = new PrintWriter("file-io-serialization\\write.txt");
ps.println("任意数据写入");
ps1.println("任意数据写入");
}
}
重定向打印流,可以将本来输出到控制台输出到指定文件
import java.io.*;
public class Printsteamdemo {
public static void main(String[] args) throws Exception {
PrintStream ps = new PrintStream("file-io-serialization/log.log");
System.setOut(ps);
System.out.println("重定向输出");
}
}
Properties用于读取配置文件
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Properties;
public class Propretiesdemo {
public static void main(String[] args) throws Exception {
Properties p = new Properties();
p.setProperty("中文","1");
p.setProperty("B","2");
p.setProperty("C","3");
p.setProperty("D","4");
p.store(new FileWriter("file-io-serialization\\write.properties"),"这是个注释,将键值对保存到配置文件,后缀需要是properties");
p.load(new FileReader("file-io-serialization\\write.properties"));
System.out.println("读取内容"+p.getProperty("中文"));
}
}
第三方IO框架,更加常用,之前文章用于基础了解,可进一步理解IO框架的原理
1、下载第三方jar包:Commons IO – Download Apache Commons IO
2、解压包得到:commons-io-2.11.0.jar,在项目模块中创建lib目录放入,然后添加到依赖版本即可使用,FileUtils更加方便简洁
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.*;
public class Iouitodemo {
public static void main(String[] args) throws Exception {
FileUtils.copyFile(new File("D:\\zhengqinjie\\logback-classic-1.2.3.jar"),new File("D:\\zhengqinjie\\新建文件夹\\3.jar"));
String reader = FileUtils.readFileToString(new File("D:\\zhengqinjie\\新建文件夹\\1建.txt"),"utf-8");
System.out.println(reader);
FileUtils.copyDirectoryToDirectory(new File("D:\\zhengqinjie"),new File("D:\\zhengqinjie1"));
FileUtils.deleteDirectory(new File("D:\\zhengqinjie1"));
IOUtils.copy(new FileInputStream("D:\\zhengqinjie\\logback-classic-1.2.3.jar"),new FileOutputStream("D:\\zhengqinjie\\los.3.jar") );
}
}