Index: trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java	(revision 14722)
+++ trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java	(revision 14723)
@@ -16,4 +16,5 @@
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
@@ -45,4 +46,5 @@
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.MultiMap;
+import org.openstreetmap.josm.tools.StreamUtils;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.XmlUtils;
@@ -214,14 +216,13 @@
          * @see Path#relativize(Path)
          */
-        String relativize(final Path path) {
-            if (getOutput() == null) {
-                return path.toString();
+        String relativize(Path path) {
+            final Path output = getOutput();
+            if (output != null && path.startsWith(output.getParent())) {
+                path = output.getParent().relativize(path);
             }
-            final Path sessionDirectory = getOutput().getParent();
-            if (path.startsWith(sessionDirectory)) {
-                return sessionDirectory.relativize(path).toString();
-            } else {
-                return path.toString();
-            }
+            // path.toString() returns backslashes on Windows, see #17228
+            return StreamUtils.toStream(path)
+                    .map(Object::toString)
+                    .collect(Collectors.joining("/"));
         }
     }
