-
RandomAccessFile写操作查看全部
-
RandomAccessFile写操作查看全部
-
RandomAccessFile提供对文件内容的访问,既可以读文件,也可以写文件。随机访问文件,可以访问文件的任意位置查看全部
-
编码转换查看全部
-
File遍历目录与文件 public static void listDirectory(File dir) throws IOException { // 判断是否是否存在 if (!dir.exists()) { throw new IllegalArgumentException("目录:" + dir + "不存在"); } // 判断是否为目录 if (!dir.isDirectory()) { throw new IllegalArgumentException(dir + "不是目录"); } // list方法用于列出当前目录下的子目录和文件,返回的是字符串数组,不包含子目录下的文件 /*String[] filenames = dir.list(); for (String string : filenames) { System.out.println(dir + "\\" + string); } */ // 如果要遍历子目录下的内容就需要构造成File对象做递归操作,File提供了直接返回File对象的方法 // 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 File[] files = dir.listFiles(); for (File fl : files) { if (fl.isDirectory()) { // 递归 listDirectory(fl); } else { System.out.println(fl); } } }查看全部
-
list()方法用于列出当前目录下的子目录和文件查看全部
-
RandomAccessFile-----java提供的对文件内容的访问类,既可以读文件,也可以写文件。 RandomAccessFile支持随机访问文件,可以访问文件的任意位置 (1)java文件模型 在硬盘上的文件是byte byte byte存储的,是数据的集合 (2)打开文件 有两种模式“rw(读写)”“r(只读)” RandomAccessFile raf = new RandomAccessFile(file,"rw") 文件指针,打开文件时指针在开头 pointer = 0; (3)写方法 raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入 (4)读方法 int b = raf.read()--->读一个字节 (5)文件读写完成以后一定要关闭(Oracle官方说明)查看全部
-
验证类 /* * 一个类实现了序列化接口,那么其子类都可以进行序列化。 对子类对象进行反序列化操作时,如果其父类没有实现序列化接口 ,那么其父类的构造函数会被调用。 */ class Foo implements Serializable { public Foo() { System.out.println("foo..."); } } class Foo1 extends Foo { public Foo1() { System.out.println("foo1..."); } } class Foo2 extends Foo1 { public Foo2() { System.out.println("foo2..."); } } class Bar { public Bar() { System.out.println("Bar..."); } } class Bar1 extends Bar implements Serializable { public Bar1() { System.out.println("bar1..."); } } class Bar2 extends Bar1 { public Bar2() { System.out.println("Bar2..."); } }查看全部
-
序列化主函数 public static void main(String[] args) throws IOException, Exception { /*ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( "F:/IO流/序列化/test2.txt")); Foo2 foo2 = new Foo2(); oos.writeObject(foo2); oos.flush(); oos.close();*/ // 反序列化时是否递归调用父类函数 ObjectInputStream ois = new ObjectInputStream(new FileInputStream( "F:/IO流/序列化/test2.txt")); Foo2 foo2 = (Foo2) ois.readObject(); System.out.println(foo2); ois.close(); /*ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( "F:/IO流/序列化/test2.txt")); Bar2 bar2 = new Bar2(); oos.writeObject(bar2); oos.flush(); oos.close();*/ /*ObjectInputStream ois = new ObjectInputStream(new FileInputStream( "F:/IO流/序列化/test2.txt")); Bar2 bar2 = (Bar2) ois.readObject(); System.out.println(bar2); ois.close();*/ } }查看全部
-
序列化时父类构造函数: 1.子类在反序列化时,父类实现了序列化接口,就不会递归调用其构造函数 而父类实现了serializable接口,子类继承就可序列化 2.子类在反序列化时,父类没有实现序列化接口,则会递归调用其构造函数 父类未实现serializable接口,子类自行实现可序列化 结论:当父类实现了serializable接口,子类可以被序列化,当对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,则其父类的构造函数会被调用,反之父类的构造函数不会被调用。归结为有序列化接口的构造函数不会被调用查看全部
-
序列化: transient 关键字:被transient修饰的元素,该元素不会进行jvm默认的序列化,但可以自己完成这个元素的序列化 注意: (1)在以后的网络编程中,如果有某些元素不需要传输,那就可以用transient修饰,来节省流量;对有效元素序列化,提高性能。 (2)可以使用writeObject自己完成这个元素的序列化。ArrayList就是用了此方法进行了优化操作。ArrayList最核心的容器Object[] elementData使用了transient修饰,但是在writeObject自己实现对elementData数组的序列化。只对数组中有效元素进行序列化。readObject与之类似。 (3)java.io.ObjectOutputStream.defaultWriteObject(); // 把jvm能默认序列化的元素进行序列化操作 java.io.ObjectOutputStream.writeInt(age);// 自己完成序列化 (4) java.io.ObjectOutputStream.defaultReadObject();// 把jvm能默认反序列化的元素进行反序列化 this.age = java.io.ObjectOutputStream.readInt(); // 自己完成age的反序列化操作查看全部
-
对象实体类的序列化与反序列化 public static void main(String[] args) throws IOException, Exception { String file = "F:/IO流/序列化/test.txt"; // 1.对象的序列化 /*ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( file)); Student stu = new Student("10011", "张三 ", 20); oos.writeObject(stu); oos.flush(); oos.close();*/ // 2.反序列化 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); Student stu2 = (Student) ois.readObject(); System.out.println(stu2); ois.close(); }查看全部
-
创建序列化对象实体类 package com.imooc.bean; import java.io.Serializable; public class Student implements Serializable{ private String id; private String name; private transient int age;//该元素不能被默认的序列化,也可以自己完成这个元素的序列化 public Student(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } id,name,age的set和get方法 @Override public String toString() { return "学生id:" + id + " 学生名字:" + name + " 学生年龄:" + age; } private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ s.defaultWriteObject();//将虚拟机能默认序列化的元素进行序列化操作 s.writeInt(age);//自己完成age的序列化 } private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject();//将虚拟机能默认的反序列化元素进行反序列化操作 this.age=s.readInt();//自己完成对age的反序列化操作 } }查看全部
-
IO——对象的序列化和反序列化 一、概念 1、对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化 2、序列化流(ObjectOutputStream),字节的过滤流 —— writeObject()方法 反序列化流(ObjectInputStream)—— readObject()方法 3、序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则将出现异常。 这个借口,没有任何方法,只是一个【标准】 二、transient关键字 1、transient修饰的元素,不会进行JVM默认的序列化:如int transient age = 10;在序列化和反序列化后,age的值为默认分配的值0 2、可以自己通过重写序列化操作方式,来对transient修饰的元素进行想要的序列化。 . 方法:通过从ArrayList中拿到writeObject()和readObject()方法,进行自写完成。 · 先执行s.defaultWriteObject(); 和 s.defaultReadObject()方法 · 再对于无法默认序列化的成员,可以进行.writeObject(obj)和this.obj = s.readObject()完成序列化 3、这样做的目的是提高效率。如ArrayList里,对数组的有效对象进行序列化查看全部
-
字符流的过滤器 BufferedReader---->readLine不识别换行符 BufferedWriter/PrintWriter---->write public static void main(String[] args) throws IOException { // 对文件进行读操作,套接流,需要套在节点流上 BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream("F:\\IO流\\Buffered/br.txt"))); // 使用BufferedWriter对文件进行写操作 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("F:\\IO流\\Buffered/bw.txt"))); // 使用PrintWriter对文件进行写操作 PrintWriter pw = new PrintWriter("F:/IO流/Buffered\\pw.txt"); bw.append("我是使用Buffered方法写入的"); pw.append("我是使用Print方法写入的"); String line; while ((line = br.readLine()) != null) { // 一次读一行,并不能识别换行符,输出时可以加上ln System.out.println(line); bw.write(line); // 单独写出换行 bw.newLine(); bw.flush(); pw.println(line); pw.flush(); } br.close(); bw.close(); pw.close(); }查看全部
举报
0/150
提交
取消