第三周的收获

io流案列,目录拷贝   java高级知识部分

package com.softeem.example;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileUtils {

 /**
  * 文件拷贝
  * @param source  源文件
  * @param dir 目标目录
  * @throws IOException
  */
 public void fileCopy(File source,File dir) throws IOException{
  //根据目标目录结合源文件名构建新的目标File对象
  File target = new File(dir,source.getName());
  //获取源文件的输入流并包装
  BufferedInputStream bis = new BufferedInputStream(new FileInputStream(source));
  //获取目标文件的输出流
  BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(target));
  //定义字节缓冲区
  byte[] b = new byte[1024];
  //记录每次读取的真实字节数
  int len = 0;
  while((len = bis.read(b)) != -1){
   bos.write(b, 0, len);
  }
  bos.close();
  bis.close();
 }
 
 /**
  * 完成目录拷贝
  * @param sourceDir 源目录
  * @param targetDir 目标目录
  * @throws IOException
  */
 public void dirCopy(File sourceDir,File targetDir) throws IOException{
  targetDir = new File(targetDir,sourceDir.getName());
  if(!targetDir.exists()){
   //创建目录
   targetDir.mkdirs();
  }
  //读取源目录中的子文件
  File[] files = sourceDir.listFiles();
  if(files != null){
   for(File f:files){
    if(f.isFile()){
     //拷贝文件
     fileCopy(f, targetDir);
    }else{
     //递归
     dirCopy(f, targetDir);
    }
   }
  }
 }
 
 
 public static void main(String[] args) throws IOException {
  File dir1 = new File("d:/fileTest");
  File dir2 = new File("d:/targetFile");
  new FileUtils().dirCopy(dir1, dir2);
 }
}

RandomAccessFile类

RandomAccessFile是一种特殊的文件流,可以用它在文件的任何地方查找或者插入数据RandomAccessFile同时实现了DataInput和DataOutput接口,所以,可以通过提供的writeXXX()和readXXX()读写各种不同类型的数据,并根据数据类型占据的空间大小进行存储。RandomAccessFile构造器主要包含两个:

  • RandomAccessFile(String filepath,String mode)

  • RandomAccessFile(File file,String mode)

其中mode包含四种模式:

  • r-以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException

  • rw-打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。

  • rws-读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。

  • rwd-读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备

对象序列化

对象序列化是一种用于在文件或者各种其他输入输出设备中存储java对象的机制,通过将实现过序列化结构的对象存储到指定的输出源,可以完整的保存对象数据;对象序列化机制一般常用于大型项目中的缓存技术,以缓存经常需要使用到的对象数据;java中实现对象序列化通常包含两种方式:

  1. 实现Serializable接口

  2. 实现Externalizable接口

完成对象序列化的过程必须包含以下步骤:

  1. 需要完成序列化的对象对应的类必须实现Serializable接口

  2. 通过对象输出流将对象存储到指定的输出源(文件,网络)中(通过ObjectOutputStream)

若需要将文件或者其他输入输出设备中的java对象读取出来,可以通过ObjectInputStream完成对象反序列化

实例:

package com.softeem.seri;

import java.io.Serializable;

/**
 * 序列化:把一个java对象存储到文件或者其他输出源中   ObjectOutputStream
 * 反序列化:从文件或者其他输入源读取一个java对象 ObjectInputStream
 * @author mrchai
 *
 */
public class Player implements Serializable{

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private String nickName;
 private int level;
 private int power;
 private int x;
 private int y;
 
 public String getNickName() {
  return nickName;
 }
 public void setNickName(String nickName) {
  this.nickName = nickName;
 }
 public int getLevel() {
  return level;
 }
 public void setLevel(int level) {
  this.level = level;
 }
 public int getPower() {
  return power;
 }
 public void setPower(int power) {
  this.power = power;
 }
 public int getX() {
  return x;
 }
 public void setX(int x) {
  this.x = x;
 }
 public int getY() {
  return y;
 }
 public void setY(int y) {
  this.y = y;
 }
}

public class Client {

 public static void main(String[] args) throws IOException, ClassNotFoundException {
  
  Player p = new Player();
  p.setNickName("嗜血狂魔");
  p.setLevel(23);
  p.setPower(56000);
  p.setX(289);
  p.setY(335);
  
//  //对象序列化
//  OutputStream os = new FileOutputStream("role.dat",true);
//  //获取基于文件对象的对象输出流
//  ObjectOutputStream oos  = new ObjectOutputStream(os);
//  oos.writeObject(p);
//  oos.close();
  
        //对象反序列化
  InputStream is = new FileInputStream("role.dat");
  ObjectInputStream ois = new ObjectInputStream(is);
  Object obj = ois.readObject();
  System.out.println(obj);;
  
 }

}

transient关键字:在进行对象序列化的过程中,如果对象的某些属性数据不需要被存储起来,则可在声明属性时使用transient修饰,以表示当前变量为瞬时变量。作用是一种保护机制

猜你喜欢

转载自www.cnblogs.com/zt-bk/p/9384188.html