3838import java .math .BigInteger ;
3939import java .net .URL ;
4040import java .nio .charset .Charset ;
41+ import java .nio .file .Files ;
4142import java .util .ArrayList ;
4243import java .util .Arrays ;
4344import java .util .Collection ;
6768@ SuppressWarnings ({"deprecation" , "ResultOfMethodCallIgnored" }) // unit tests include tests of many deprecated methods
6869public class FileUtilsTestCase {
6970
71+ private static final long DATE3 = 1000000002000L ;
72+
73+ private static final long DATE2 = 1000000001000L ;
74+
75+ private static final long DATE1 = 1000000000000L ;
76+
7077 @ TempDir
7178 public File temporaryFolder ;
7279
@@ -1012,7 +1019,7 @@ public void testIsFileNewerOlder() throws Exception {
10121019 } finally {
10131020 IOUtils .closeQuietly (output );
10141021 }
1015- } while (oldFile . lastModified ( ) == reference . lastModified ( ));
1022+ } while (getLastModifiedMillis ( oldFile ) == getLastModifiedMillis ( reference ));
10161023
10171024 final Date date = new Date ();
10181025 final long now = date .getTime ();
@@ -1034,7 +1041,7 @@ public void testIsFileNewerOlder() throws Exception {
10341041 } finally {
10351042 IOUtils .closeQuietly (output );
10361043 }
1037- } while (reference . lastModified ( ) == newFile . lastModified ( ));
1044+ } while (getLastModifiedMillis ( reference ) == getLastModifiedMillis ( newFile ));
10381045
10391046 // Test isFileNewer()
10401047 assertFalse (FileUtils .isFileNewer (oldFile , reference ), "Old File - Newer - File" );
@@ -1150,7 +1157,7 @@ public void testCopyFile1() throws Exception {
11501157 FileUtils .copyFile (testFile1 , destination );
11511158 assertTrue (destination .exists (), "Check Exist" );
11521159 assertEquals (testFile1Size , destination .length (), "Check Full copy" );
1153- assertEquals (testFile1 .lastModified (), destination . lastModified ( ), "Check last modified date preserved" );
1160+ assertEquals (testFile1 .lastModified (), getLastModifiedMillis ( destination ), "Check last modified date preserved" );
11541161 }
11551162
11561163 @ Test
@@ -1198,7 +1205,7 @@ public void testCopyFile2() throws Exception {
11981205 FileUtils .copyFile (testFile1 , destination );
11991206 assertTrue (destination .exists (), "Check Exist" );
12001207 assertEquals (testFile2Size , destination .length (), "Check Full copy" );
1201- assertEquals (testFile1 .lastModified () , destination . lastModified ( ), "Check last modified date preserved" );
1208+ assertEquals (testFile1 .lastModified () , getLastModifiedMillis ( destination ), "Check last modified date preserved" );
12021209 }
12031210
12041211 @ Test
@@ -1217,16 +1224,19 @@ public void testCopyToSelf() throws Exception {
12171224
12181225 @ Test
12191226 public void testCopyFile2WithoutFileDatePreservation () throws Exception {
1220- final File destination = new File (temporaryFolder , "copy2.txt" );
1227+ final File destFile = new File (temporaryFolder , "copy2.txt" );
12211228
12221229 backDateFile (testFile1 ); // set test file back 10 minutes
12231230
1224- final long now = new Date ().getTime ()-1000L ; // destination file time should not be less than this (allowing for granularity)
1225- FileUtils .copyFile (testFile1 , destination , false );
1226- assertTrue (destination .exists (), "Check Exist" );
1227- assertEquals (testFile2Size , destination .length (), "Check Full copy" );
1228- final long destLastMod = destination .lastModified ();
1229- assertNotEquals (testFile1 .lastModified (), destLastMod , "Check last modified date not same as input" );
1231+ // destination file time should not be less than this (allowing for granularity)
1232+ final long now = new Date ().getTime () - 1000L ;
1233+ FileUtils .copyFile (testFile1 , destFile , false );
1234+ assertTrue (destFile .exists (), "Check Exist" );
1235+ assertEquals (testFile2Size , destFile .length (), "Check Full copy" );
1236+ final long destLastMod = getLastModifiedMillis (destFile );
1237+ final long unexpected = getLastModifiedMillis (testFile1 );
1238+ assertNotEquals (unexpected , destLastMod ,
1239+ "Check last modified date not same as input, delta " + (destLastMod - unexpected ));
12301240 assertTrue (destLastMod > now , destLastMod + " > " + now );
12311241 }
12321242
@@ -1388,45 +1398,51 @@ public void testCopyDirectoryPreserveDates() throws Exception {
13881398 // Set dates in reverse order to avoid overwriting previous values
13891399 // Also, use full seconds (arguments are in ms) close to today
13901400 // but still highly unlikely to occur in the real world
1391- sourceFile .setLastModified (1000000002000L );
1392- sourceDirectory .setLastModified (1000000001000L );
1393- source .setLastModified (1000000000000L );
1401+ sourceFile .setLastModified (DATE3 );
1402+ sourceDirectory .setLastModified (DATE2 );
1403+ source .setLastModified (DATE1 );
13941404
13951405 final File target = new File (temporaryFolder , "target" );
13961406 final File targetDirectory = new File (target , "directory" );
13971407 final File targetFile = new File (targetDirectory , "hello.txt" );
13981408
13991409 // Test with preserveFileDate disabled
14001410 FileUtils .copyDirectory (source , target , false );
1401- assertTrue (1000000000000L != target . lastModified ( ));
1402- assertTrue (1000000001000L != targetDirectory . lastModified ( ));
1403- assertTrue (1000000002000L != targetFile . lastModified ( ));
1411+ assertTrue (DATE1 != getLastModifiedMillis ( target ));
1412+ assertTrue (DATE2 != getLastModifiedMillis ( targetDirectory ));
1413+ assertTrue (DATE3 != getLastModifiedMillis ( targetFile ));
14041414 FileUtils .deleteDirectory (target );
14051415
14061416 // Test with preserveFileDate enabled
14071417 FileUtils .copyDirectory (source , target , true );
1408- assertEquals (1000000000000L , target . lastModified ( ));
1409- assertEquals (1000000001000L , targetDirectory . lastModified ( ));
1410- assertEquals (1000000002000L , targetFile . lastModified ( ));
1418+ assertEquals (DATE1 , getLastModifiedMillis ( target ));
1419+ assertEquals (DATE2 , getLastModifiedMillis ( targetDirectory ));
1420+ assertEquals (DATE3 , getLastModifiedMillis ( targetFile ));
14111421 FileUtils .deleteDirectory (target );
14121422
14131423 // also if the target directory already exists (IO-190)
14141424 target .mkdirs ();
14151425 FileUtils .copyDirectory (source , target , true );
1416- assertEquals (1000000000000L , target . lastModified ( ));
1417- assertEquals (1000000001000L , targetDirectory . lastModified ( ));
1418- assertEquals (1000000002000L , targetFile . lastModified ( ));
1426+ assertEquals (DATE1 , getLastModifiedMillis ( target ));
1427+ assertEquals (DATE2 , getLastModifiedMillis ( targetDirectory ));
1428+ assertEquals (DATE3 , getLastModifiedMillis ( targetFile ));
14191429 FileUtils .deleteDirectory (target );
14201430
14211431 // also if the target subdirectory already exists (IO-190)
14221432 targetDirectory .mkdirs ();
14231433 FileUtils .copyDirectory (source , target , true );
1424- assertEquals (1000000000000L , target . lastModified ( ));
1425- assertEquals (1000000001000L , targetDirectory . lastModified ( ));
1426- assertEquals (1000000002000L , targetFile . lastModified ( ));
1434+ assertEquals (DATE1 , getLastModifiedMillis ( target ));
1435+ assertEquals (DATE2 , getLastModifiedMillis ( targetDirectory ));
1436+ assertEquals (DATE3 , getLastModifiedMillis ( targetFile ));
14271437 FileUtils .deleteDirectory (target );
14281438 }
14291439
1440+ public long getLastModifiedMillis (final File file ) throws IOException {
1441+ return file .lastModified ();
1442+ //https://bugs.openjdk.java.net/browse/JDK-8177809
1443+ //return Files.getLastModifiedTime(file.toPath()).toMillis();
1444+ }
1445+
14301446 /* Test for IO-141 */
14311447 @ Test
14321448 public void testCopyDirectoryToChild () throws Exception {
@@ -1759,13 +1775,13 @@ public void testTouch() throws IOException {
17591775 final long y2k = new GregorianCalendar (2000 , 0 , 1 ).getTime ().getTime ();
17601776 final boolean res = file .setLastModified (y2k ); // 0L fails on Win98
17611777 assertEquals (true , res , "Bad test: set lastModified failed" );
1762- assertEquals (y2k , file . lastModified ( ), "Bad test: set lastModified set incorrect value" );
1778+ assertEquals (y2k , getLastModifiedMillis ( file ), "Bad test: set lastModified set incorrect value" );
17631779 final long now = System .currentTimeMillis ();
17641780 FileUtils .touch (file );
17651781 assertEquals (1 , file .length (), "FileUtils.touch() didn't empty the file." );
1766- assertEquals (false , y2k == file . lastModified ( ), "FileUtils.touch() changed lastModified" );
1767- assertEquals (true , file . lastModified ( ) >= now - 3000 , "FileUtils.touch() changed lastModified to more than now-3s" );
1768- assertEquals (true , file . lastModified ( ) <= now + 3000 , "FileUtils.touch() changed lastModified to less than now+3s" );
1782+ assertEquals (false , y2k == getLastModifiedMillis ( file ), "FileUtils.touch() changed lastModified" );
1783+ assertEquals (true , getLastModifiedMillis ( file ) >= now - 3000 , "FileUtils.touch() changed lastModified to more than now-3s" );
1784+ assertEquals (true , getLastModifiedMillis ( file ) <= now + 3000 , "FileUtils.touch() changed lastModified to less than now+3s" );
17691785 }
17701786
17711787 @ Test
@@ -3076,16 +3092,19 @@ public void testIncorrectOutputSize() throws Exception {
30763092 }
30773093 }
30783094
3079- private void backDateFile (File testFile ){
3080- final long mins10 = 1000 *60 *10 ;
3081- final long lastModified1 = testFile .lastModified ();
3082- testFile .setLastModified (lastModified1 -mins10 );
3083- assertNotEquals (testFile .lastModified (), lastModified1 , "Should have changed source date" ); // ensure it was changed
3095+ private void backDateFile (File testFile ) throws IOException {
3096+ final long mins10 = 1000 * 60 * 10 ;
3097+ final long lastModified1 = getLastModifiedMillis (testFile );
3098+ testFile .setLastModified (lastModified1 - mins10 );
3099+ // ensure it was changed
3100+ assertNotEquals (getLastModifiedMillis (testFile ), lastModified1 , "Should have changed source date" );
30843101 }
3102+
30853103 /**
30863104 * DirectoryWalker implementation that recursively lists all files and directories.
30873105 */
30883106 static class ListDirectoryWalker extends DirectoryWalker <File > {
3107+
30893108 ListDirectoryWalker () {
30903109 super ();
30913110 }
0 commit comments