diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/FactoryFinder.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/FactoryFinder.java
index 237e3f7..d6545ff 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/FactoryFinder.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/FactoryFinder.java
@@ -16,9 +16,10 @@
 
 package jakarta.ws.rs.client;
 
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Properties;
@@ -123,15 +124,14 @@
         }
 
         // try to read from $java.home/lib/jaxrs.properties
-        FileInputStream inputStream = null;
-        String configFile = null;
+        InputStream inputStream = null;
+        Path configFile = null;
         try {
             String javah = System.getProperty("java.home");
-            configFile = javah + File.separator + "lib" + File.separator + "jaxrs.properties";
-            File f = new File(configFile);
-            if (f.exists()) {
+            configFile = Path.of(javah, "lib", "jaxrs.properties");
+            if (Files.exists(configFile)) {
                 Properties props = new Properties();
-                inputStream = new FileInputStream(f);
+                inputStream = Files.newInputStream(configFile);
                 props.load(inputStream);
                 String factoryClassName = props.getProperty(factoryId);
                 return newInstance(factoryClassName, classLoader);
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/ext/FactoryFinder.java b/jaxrs-api/src/main/java/jakarta/ws/rs/ext/FactoryFinder.java
index bd46f79..b3081bd 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/ext/FactoryFinder.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/ext/FactoryFinder.java
@@ -16,9 +16,10 @@
 
 package jakarta.ws.rs.ext;
 
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Properties;
@@ -123,15 +124,14 @@
         }
 
         // try to read from $java.home/lib/jaxrs.properties
-        FileInputStream inputStream = null;
-        String configFile = null;
+        InputStream inputStream = null;
+        Path configFile = null;
         try {
             String javah = System.getProperty("java.home");
-            configFile = javah + File.separator + "lib" + File.separator + "jaxrs.properties";
-            File f = new File(configFile);
-            if (f.exists()) {
+            configFile = Path.of(javah, "lib", "jaxrs.properties");
+            if (Files.exists(configFile)) {
                 Properties props = new Properties();
-                inputStream = new FileInputStream(f);
+                inputStream = Files.newInputStream(configFile);
                 props.load(inputStream);
                 String factoryClassName = props.getProperty(factoryId);
                 return newInstance(factoryClassName, classLoader);
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/sse/FactoryFinder.java b/jaxrs-api/src/main/java/jakarta/ws/rs/sse/FactoryFinder.java
index a9d2415..8622d63 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/sse/FactoryFinder.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/sse/FactoryFinder.java
@@ -16,9 +16,10 @@
 
 package jakarta.ws.rs.sse;
 
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Properties;
@@ -123,15 +124,14 @@
         }
 
         // try to read from $java.home/lib/jaxrs.properties
-        FileInputStream inputStream = null;
-        String configFile = null;
+        Path configFile = null;
+        InputStream inputStream = null;
         try {
             String javah = System.getProperty("java.home");
-            configFile = javah + File.separator + "lib" + File.separator + "jaxrs.properties";
-            File f = new File(configFile);
-            if (f.exists()) {
+            configFile = Path.of(javah, "lib", "jaxrs.properties");
+            if (Files.exists(configFile)) {
                 Properties props = new Properties();
-                inputStream = new FileInputStream(f);
+                inputStream = Files.newInputStream(configFile);
                 props.load(inputStream);
                 String factoryClassName = props.getProperty(factoryId);
                 return newInstance(factoryClassName, classLoader);
