package com.googlecode.totallylazy.io; import com.googlecode.totallylazy.collections.CloseableList; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Date; import static com.googlecode.totallylazy.Streams.nullOutputStream; import static com.googlecode.totallylazy.collections.CloseableList.constructors.closeableList; public class FileDestination implements Destination { private final CloseableList<OutputStream> closeables; private final File folder; private FileDestination(File folder) { this.folder = folder; closeables = closeableList(OutputStream.class); } public static FileDestination fileDestination(File folder) { return new FileDestination(folder); } @Override public OutputStream destination(String name, final Date modified) throws IOException { final File file = new File(folder, name); file.getParentFile().mkdirs(); if (name.endsWith("/")) { file.mkdir(); file.setLastModified(modified.getTime()); return nullOutputStream(); } return closeables.manage(new FileOutputStream(file) { @Override public void close() throws IOException { super.close(); file.setLastModified(modified.getTime()); } }); } @Override public void close() throws IOException { closeables.close(); } }