This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-vfs.git


The following commit(s) were added to refs/heads/master by this push:
     new 107b80b8f Add LocalFileProvider.findLocalFile(Path)
107b80b8f is described below

commit 107b80b8f1b63b027b7084eece82f68f81d5739c
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Fri Jan 31 16:06:18 2025 -0500

    Add LocalFileProvider.findLocalFile(Path)
---
 .../org/apache/commons/vfs2/FileSystemManager.java    | 13 +++++++++++++
 .../commons/vfs2/FileSystemManagerFactoryTest.java    |  3 +++
 .../vfs2/impl/DefaultFileSystemManagerTest.java       | 19 ++++++++++++++++---
 src/changes/changes.xml                               |  1 +
 4 files changed, 33 insertions(+), 3 deletions(-)

diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemManager.java 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemManager.java
index f7582e056..5987b4110 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemManager.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileSystemManager.java
@@ -21,6 +21,7 @@ import java.lang.reflect.Constructor;
 import java.net.URI;
 import java.net.URL;
 import java.net.URLStreamHandlerFactory;
+import java.nio.file.Path;
 import java.util.Collection;
 
 import org.apache.commons.logging.Log;
@@ -351,4 +352,16 @@ public interface FileSystemManager extends AutoCloseable {
      */
     FileObject toFileObject(File file) throws FileSystemException;
 
+    /**
+     * Converts a local path into a {@link FileObject}.
+     *
+     * @param path The path to convert.
+     * @return The {@link FileObject} that represents the local file. Never 
returns null.
+     * @throws FileSystemException On error converting the file.
+     * @since 2.10.0
+     */
+    default FileObject toFileObject(final Path path) throws 
FileSystemException {
+        return toFileObject(path.toFile());
+    }
+
 }
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/FileSystemManagerFactoryTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/FileSystemManagerFactoryTest.java
index 901f864e3..f33bcc007 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/FileSystemManagerFactoryTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/FileSystemManagerFactoryTest.java
@@ -57,6 +57,9 @@ public class FileSystemManagerFactoryTest {
         // File
         final FileObject file = manager.toFileObject(jarFile);
         check(manager, file);
+        // Path
+        final FileObject path = manager.toFileObject(jarFile.toPath());
+        check(manager, file);
         // URI
         final FileObject file2 = manager.resolveFile(jarFile.toURI());
         check(manager, file2);
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
index 6675e31f5..2161da803 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileSystemManagerTest.java
@@ -25,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 
 import org.apache.commons.vfs2.CacheStrategy;
@@ -86,7 +87,10 @@ public class DefaultFileSystemManagerTest {
             VFS.setManager(null);
         }
         assertNotNull(VFS.getManager());
-        
assertFalse(VFS.getManager().resolveFile(Paths.get("DoesNotExist.not").toUri()).exists());
+        final Path path = Paths.get("DoesNotExist.not");
+        assertFalse(VFS.getManager().resolveFile(path.toUri()).exists());
+        assertFalse(VFS.getManager().toFileObject(path.toFile()).exists());
+        assertFalse(VFS.getManager().toFileObject(path).exists());
     }
 
     @Test
@@ -94,9 +98,18 @@ public class DefaultFileSystemManagerTest {
         testCreateFileSystem("src/test/resources/test-data/bla.txt.bz2", 
Bzip2FileObject.class);
     }
 
-    private void testCreateFileSystem(final String path, final Class<?> clazz) 
throws FileSystemException {
+    private void testCreateFileSystem(final String fileStr, final Class<?> 
clazz) throws FileSystemException {
         final FileSystemManager manager = VFS.getManager();
-        try (FileObject localFileObject = manager.resolveFile(new 
File(path).getAbsolutePath());
+        final Path path = Paths.get(fileStr);
+        try (FileObject localFileObject = manager.toFileObject(path);
+                FileObject fileObject = 
manager.createFileSystem(localFileObject)) {
+            assertEquals(clazz, fileObject.getClass());
+        }
+        try (FileObject localFileObject = manager.toFileObject(path.toFile());
+                FileObject fileObject = 
manager.createFileSystem(localFileObject)) {
+            assertEquals(clazz, fileObject.getClass());
+        }
+        try (FileObject localFileObject = manager.resolveFile(new 
File(fileStr).getAbsolutePath());
                 FileObject fileObject = 
manager.createFileSystem(localFileObject)) {
             assertEquals(clazz, fileObject.getClass());
         }
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 73c8022c5..6af3c3c19 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -266,6 +266,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add FileSystemConfigBuilder.getParamOrDefault(FileSystemOptions, 
String, T).
       </action>
+      <action type="add" dev="ggregory" due-to="Gary Gregory">Add 
FileSystemManager.toFileObject(Path).</action>
       <!-- UPDATE -->
       <action dev="ggregory" due-to="Dependabot, Gary Gregory" type="update">
         Bump org.apache.commons:commons-parent from 52 to 81 #497, #588, #592, 
#600, #608, #615, #623.

Reply via email to