Java 考虑到URL/URI格式输入字符串的可能性,是否有一种将字符串转换为文件的标准方法

Java 考虑到URL/URI格式输入字符串的可能性,是否有一种将字符串转换为文件的标准方法,java,string,file,url,uri,Java,String,File,Url,Uri,我希望获得字符串的最准确的文件类型表示,该字符串应以以下几种形式之一引用本地(现有)文件: String file0 = "/home/my_user/file.txt" String file1 = "file:///home/my_user/file.txt" String file2 = "file.txt"; // assuming that the working dir is /home/my_user. 是否有一个(准)使用标准库的单行程序,或者像ApacheCommons

我希望获得字符串的最准确的
文件
类型表示,该字符串应以以下几种形式之一引用本地(现有)文件:

String file0 = "/home/my_user/file.txt"

String file1 = "file:///home/my_user/file.txt"

String file2 = "file.txt"; // assuming that the working dir is /home/my_user.

是否有一个(准)使用标准库的单行程序,或者像ApacheCommons这样的通用第三方可以做到这一点


谢谢。

对于示例1和3,您可以调用
新文件(x)
,它应该可以工作

至于#2,您可以创建一个
URI
,然后从中创建
文件。事实上,我认为它们都可能使用URI工作

String fileStr = "file:///home/my_user/file.txt";
try {
  URI uri = new URI(fileStr);
  File f = new File(uri);
} catch (URISyntaxException ex) { ...}

您可以为此定义自己的函数。下面给出了功能定义和测试代码:

import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

public class Main {
    public static void main(String[] args) {
        String file0 = "/Users/arvind.avinash/file.txt";
        String file1 = "file:///Users/arvind.avinash/file.txt";
        String file2 = "file.txt"; // assuming that the working dir is /Users/arvind.avinash.

        System.out.println(getFile(file0).exists());
        System.out.println(getFile(file1).exists());
        System.out.println(getFile(file2).exists());
    }

    static File getFile(String pathOrUri) {
        URI uri;
        File file = null;
        try {
            uri = new URL(pathOrUri).toURI();
        } catch (MalformedURLException e) {
            return new File(pathOrUri);
        } catch (URISyntaxException e) {
            return new File(pathOrUri);
        }
        if (uri != null) {
            file = new File(uri);
        }
        return file;
    }
}
输出:

true
true
true

[更新]

以下是一个更简化的版本:

import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

public class Main {
    public static void main(String[] args) {
        String file0 = "/Users/arvind.avinash/file.txt";
        String file1 = "file:///Users/arvind.avinash/file.txt";
        String file2 = "file.txt"; // assuming that the working dir is /Users/arvind.avinash.

        System.out.println(getFile(file0).exists());
        System.out.println(getFile(file1).exists());
        System.out.println(getFile(file2).exists());
    }

    static File getFile(String pathOrUri) {
        URI uri;
        try {
            uri = new URL(pathOrUri).toURI();
        } catch (MalformedURLException | URISyntaxException e) {
            return new File(pathOrUri);
        }
        return new File(uri);
    }
}

谢谢你的密码。如果你有时间,我想可以简化一下。谢谢你的回答。但是,不确定
try{}
块试图完成什么。。。可能它甚至没有编译,或者确实编译了。