so I did run into one very weird issue. The idea is simple: create temp dir, place some files in it and then try to access them. Now the problem is that calling File.createTempDir()
or Files.createTempDirectory(prefix)
creates new file inside AppData/Local/temp
with shortened path, so the full path to folder looks something like C:/Users/FirstNam~1/AppData/Local/Temp/myFolder/myFile.txt
instead of C:/Users/FirstName LastName/AppData/Local/Temp/myFolder.myFile.txt
.
The difference is that generated path inside java contains FirstNam~1
instead of FistName SecondName
. Java then throws exception File Not Found
.
When I try to copy and paste shortened path into file explorer I get an error saying that file does not exist, but if I do change shortened path to full one then file opens and it works as intended.
Is there any way to fix it? Ether by forcing java to use full path names or enabling something in windows? I did Enable NTFS long paths policy, but it did not help.
This is happening when using java 8/11 and windows 10 running on VM, project is using AGP and gradle. Temp file is created inside groovy file that extends Plugin<Project>
Advertisement
Answer
Just when I lose hope and create a ticket, couple hours after that I find the answer. So, java has method Path.toRealPath()
which solves this ~1
issue. After using this method paths no longer contain shortening and are correctly resolved.
EDIT: looks like java is doing everything correct and paths are actually valid, problem did come from library that I’m using and it’s a bug with it.