--- old/src/java.base/windows/classes/java/io/WinNTFileSystem.java 2017-06-27 12:02:11.315306300 -0700 +++ new/src/java.base/windows/classes/java/io/WinNTFileSystem.java 2017-06-27 12:02:10.893431300 -0700 @@ -29,6 +29,7 @@ import java.nio.file.Path; import java.util.Locale; import java.util.Properties; +import java.util.stream.IntStream; import sun.security.action.GetPropertyAction; /** @@ -587,22 +588,12 @@ @Override public File[] listRoots() { int ds = listRoots0(); - int n = 0; - for (int i = 0; i < 26; i++) { - if (((ds >> i) & 1) != 0) { - if (!access((char)('A' + i) + ":" + slash)) - ds &= ~(1 << i); - else - n++; - } - } - File[] fs = new File[n]; - int j = 0; - char slash = this.slash; - for (int i = 0; i < 26; i++) { - if (((ds >> i) & 1) != 0) - fs[j++] = new File((char)('A' + i) + ":" + slash); - } + File[] fs = IntStream + .range(0, 26) + .filter(i -> ((ds >> i) & 1) != 0) + .mapToObj(i -> new File((char)('A' + i) + ":" + slash)) + .filter(f -> access(f.getPath()) && f.exists()) + .toArray(File[]::new); return fs; }