1 25 package org.archive.io; 26 27 import java.io.File ; 28 import java.io.IOException ; 29 import java.io.ObjectOutputStream ; 30 import java.io.OutputStream ; 31 import java.util.LinkedList ; 32 33 import org.archive.util.FileUtils; 34 35 36 43 public class ObjectPlusFilesOutputStream extends ObjectOutputStream { 44 LinkedList <File > auxiliaryDirectoryStack = new LinkedList <File >(); 45 46 53 public ObjectPlusFilesOutputStream(OutputStream out, File topDirectory) throws IOException { 54 super(out); 55 auxiliaryDirectoryStack.addFirst(topDirectory); 56 } 57 58 64 public void pushAuxiliaryDirectory(String dir) { 65 auxiliaryDirectoryStack.addFirst(new File (getAuxiliaryDirectory(),dir)); 66 } 67 68 72 public void popAuxiliaryDirectory() { 73 auxiliaryDirectoryStack.removeFirst(); 74 } 75 76 82 public File getAuxiliaryDirectory() { 83 return (File )auxiliaryDirectoryStack.getFirst(); 84 } 85 86 100 public void snapshotAppendOnlyFile(File file) throws IOException { 101 String name = file.getName(); 103 writeUTF(name); 104 writeLong(file.length()); 106 File auxDir = getAuxiliaryDirectory(); 107 if(!auxDir.exists()) { 108 auxDir.mkdirs(); 109 } 110 File destination = new File (auxDir,name); 111 hardlinkOrCopy(file, destination); 112 } 113 114 124 private void hardlinkOrCopy(File file, File destination) throws IOException { 125 Process link = Runtime.getRuntime().exec("ln "+file.getAbsolutePath()+" "+destination.getAbsolutePath()); 127 try { 129 link.waitFor(); 130 } catch (InterruptedException e) { 131 e.printStackTrace(); 133 } 134 if(link.exitValue()!=0) { 135 FileUtils.copyFile(file,destination); 137 } 138 } 139 140 } 141 | Popular Tags |