Setting created timestamp of files using BasicFileAttributeView

Michael Hall mik3hall at gmail.com
Sun Mar 6 12:26:32 UTC 2016


> On Mar 6, 2016, at 5:28 AM, Robert Krüger <krueger at lesspain.de> wrote:
> 
> 
> 
> On Sat, Mar 5, 2016 at 3:23 PM, Michael Hall <mik3hall at gmail.com <mailto:mik3hall at gmail.com>> wrote:
>> On Mar 5, 2016, at 7:15 AM, Robert Krüger <krueger at lesspain.de <mailto:krueger at lesspain.de>> wrote:
>> 
>> 
> 
> This…,
> https://stackoverflow.com/questions/9198184/setting-file-creation-timestamp-in-java <https://stackoverflow.com/questions/9198184/setting-file-creation-timestamp-in-java>
> seems to suggest that File.setLastModified will accomplish what you wan on OS Xt.
> 
> No, that's what I started with and it does what it's documented to do.


I’m assuming ‘what it’s documented to do’ means it changes something other than finder creation date/time. 

Maybe the stack overflow link I posted wasn’t concerned with changing Finder related.
These suggest using the ‘touch’ or ‘SetFile’ commands could accomplish this...
https://medium.com/@danilosapad/how-to-change-a-file-s-last-modified-and-creation-dates-on-mac-os-x-494f8f76cdf4#.y8qxzwtgg <https://medium.com/@danilosapad/how-to-change-a-file-s-last-modified-and-creation-dates-on-mac-os-x-494f8f76cdf4#.y8qxzwtgg>
https://apple.stackexchange.com/questions/99536/changing-creation-date-of-a-file <https://apple.stackexchange.com/questions/99536/changing-creation-date-of-a-file>
you could probably runtime exec those from java easily enough. 

Changing even from native seems like it could be a little tricky for some reason. At least this link suggests it might be...
https://stackoverflow.com/questions/6905503/setting-nsfilecreationdate-has-no-effect <https://stackoverflow.com/questions/6905503/setting-nsfilecreationdate-has-no-effect>

My trz code does support some cocoa/NSFileManager type attributes…
https://github.com/mik3hall/trz/blob/master/src/us/hall/trz/osx/test/MacAttributesTest.java <https://github.com/mik3hall/trz/blob/master/src/us/hall/trz/osx/test/MacAttributesTest.java>
shows junit tests of some of the api’s supported.
For Cocoa it has this.

	@Test
	public void testCocoa() {
		try {
			File f = new File("build.xml");
			Path p = f.toPath();
			Map<String,Object> attrs = Files.readAttributes(p,"mac_cocoa:*");
			assertEquals(17,attrs.size());
			assertFalse(((Boolean)Files.getAttribute(p,"mac_cocoa:NSFileBusy")).booleanValue());
			assertEquals(Files.size(p),((Long)Files.getAttribute(p,"mac_cocoa:NSFileSize")).longValue());
			attrs = Files.readAttributes(p,"mac_cocoa:NSFileModificationDate,mac_cocoa:NSFilePosixPermissions");
			assertEquals(2,attrs.size());		
		}
		catch (IOException ioex) { fail(ioex.toString()); }
	} 

Updating may not be supported. But could be added if you or anyone else want to use it. I didn’t want my first feedback on the code to be that someone tried it and something got messed up on their machine. “Hey, I tried your code and it turned all the files orange”. (I think I did include that possibility for FinderInfo though…
Files.setAttribute(p, "mac_finder:label", "orange”);
it was just kind of fun).
This would do all the native for you and allow you to do what you want in the nio.2 way. Assuming I can get it to work. Despite the last stack overflow post it doesn’t seem like it should be all that difficult.

Michael Hall






More information about the macosx-port-dev mailing list