package com.levelup.java.io;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import com.google.common.io.Files;
/**
* This java example will demonstrate changing a files last modified date.
*
* @author Justin Musgrove
* @see <a href=
* 'http://www.leveluplunch.com/java/examples/change-file-last-modified-date/'>Chang
* e files last modified date</a>
*
*/
public class ChangeFileLastModifiedDate {
private static final Logger logger = Logger
.getLogger(ChangeFileLastModifiedDate.class);
private static final String OUTPUT_FILE_NAME = "output/ChangeFileLastModifiedDate.txt";
@Before
public void setUp() throws IOException {
// create new empty file
File file = new File(OUTPUT_FILE_NAME);
file.createNewFile();
}
@Test
public void change_last_modified_date_java() {
SimpleDateFormat dateFormatter = new SimpleDateFormat(
"MM/dd/yyyy HH:mm:ss");
File file = new File(OUTPUT_FILE_NAME);
// display current lastmodified
logger.info(dateFormatter.format(file.lastModified()));
// set current datetime to lastmodified
DateTime today = new DateTime(file.lastModified());
// minus 5 days
file.setLastModified(today.minusDays(5).getMillis());
// display latest lastmodified
logger.info(dateFormatter.format(file.lastModified()));
}
@Test
public void change_last_modified_date_java7()
throws URISyntaxException, IOException {
Path path = Paths.get(OUTPUT_FILE_NAME);
DateTime today = new DateTime(new Date());
FileTime fileTime = FileTime.from(today.minusDays(5).getMillis(),
TimeUnit.MILLISECONDS);
java.nio.file.Files.setLastModifiedTime(path, fileTime);
}
/**
* Files.touch creates an empty file or updates the last updated timestamp
* on the same as the unix command of the same name.
*
* @throws IOException
*/
@Test
public void touch_file_guava() throws IOException {
SimpleDateFormat dateFormatter = new SimpleDateFormat(
"MM/dd/yyyy HH:mm:ss");
DateTime today = new DateTime();
File file = new File(OUTPUT_FILE_NAME);
// set last modified to 5 days ago
file.setLastModified(today.minusDays(5).getMillis());
// display latest lastmodified
logger.info(dateFormatter.format(file.lastModified()));
Files.touch(file);
// display latest lastmodified
logger.info(dateFormatter.format(file.lastModified()));
}
/**
* FileUtils.touch Implements the same behaviour as the "touch" utility on
* Unix. It creates a new file with size 0 or, if the file exists already,
* it is opened and closed without modifying it, but updating the file date
* and time.
*
*
* @throws IOException
*/
@Test
public void touch_file_apache() throws IOException {
SimpleDateFormat dateFormatter = new SimpleDateFormat(
"MM/dd/yyyy HH:mm:ss");
DateTime today = new DateTime();
File file = new File(OUTPUT_FILE_NAME);
// set last modified to 5 days ago
file.setLastModified(today.minusDays(5).getMillis());
// display latest lastmodified
logger.info(dateFormatter.format(file.lastModified()));
FileUtils.touch(file);
// display latest lastmodified
logger.info(dateFormatter.format(file.lastModified()));
}
}