Mariusz Sieroń 6 rokov pred
rodič
commit
5b7af371eb

+ 17 - 2
assira/src/main/java/net/ranides/assira/io/PathUtils.java

@@ -44,11 +44,26 @@ public final class PathUtils {
     }
     
     public static Path changeExtension(String path, String extension) {
-        int index = path.indexOf(".");
+        int from = Math.max(0, Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\')));
+        int index = path.substring(from).indexOf(".");
         if(-1==index) {
             return Paths.get(path + extension);
         } else {
-            return Paths.get(path.substring(0,index) + extension);
+            return Paths.get(path.substring(0, from + index) + extension);
+        }
+    }
+
+    public static Path changeSuffix(Path path, String extension) {
+        return changeSuffix(path.toString(), extension);
+    }
+
+    public static Path changeSuffix(String path, String extension) {
+        int from = Math.max(0, Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\')));
+        int index = path.substring(from).lastIndexOf(".");
+        if(-1==index) {
+            return Paths.get(path + extension);
+        } else {
+            return Paths.get(path.substring(0, from + index) + extension);
         }
     }
 

+ 5 - 0
assira/src/test/java/net/ranides/assira/io/PathUtilsTest.java

@@ -89,6 +89,11 @@ public class PathUtilsTest {
         assertEquals(Paths.get("/base","name","file.dat"), pce("/base/name\\file.txt", ".dat"));
     }
 
+    @Test
+    public void testChangeSuffix() {
+        assertEquals("c:\\ms\\root\\data.exe", PathUtils.changeSuffix("c:\\ms\\root\\data.if", ".exe").toString() );
+    }
+
     @Test
     public void testChangeExtensionP_NIX() {
         Assume.assumeFalse(HostSystem.WINDOWS.detected());