指定java程序内文件的路径

时间:2015-05-06 05:00:25

标签: java

我有一个需要文件路径的程序。目前,它的配置如下:

public class Main {

    private static final String ACOUSTIC_MODEL_PATH =
            "resource:/edu/cmu/sphinx/models/en-us/en-us";
    private static final String DICTIONARY_PATH =
            "resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict";

我有两个问题:

  1. 这个resource:/path/goes/here格式是什么,特别是resource字?
  2. 如何指定磁盘上文件的路径?
  3. 我尝试了这些选项,但无法找到文件:

    private static final String DICTIONARY_PATH = "/d/cmudict-en-us.dict";
    private static final String DICTIONARY_PATH = "file:/d/cmudict-en-us.dict";
    private static final String DICTIONARY_PATH = "file://d/cmudict-en-us.dict";
    

    以下是路径的使用方式(位置是此处的路径):

    public static URL resourceToURL(String location) throws MalformedURLException {
        Matcher jarMatcher = jarPattern.matcher(location);
        if (jarMatcher.matches()) {
            String resourceName = jarMatcher.group(1);
            return ConfigurationManagerUtils.class.getResource(resourceName);
        } else {
            if (location.indexOf(':') == -1) {
                location = "file:" + location;
            }
            return new URL(location);
        }
    }
    

2 个答案:

答案 0 :(得分:1)

似乎resources:/只是程序中使用的内部模式(请参阅jarPattern正则表达式,该表达式应在程序中的某处声明)。它不是描述URL的常用语法。但是如果这种模式不匹配,则回退实现是将字符串视为URL。本地文件URL始终以file:///开头,后跟普通路径,其中反斜杠替换为正斜杠。

请尝试以下字符串,它是有效的网址:

"file:///d:/cmudict-en-us.dict"

答案 1 :(得分:0)

如果要在磁盘上指定路径,可以使用其绝对路径,如下所示:

String path = "C:\Folder\AnotherFolder\file.txt";

然而,问题在于' \'符号可能会导致问题,因为java将其识别为尝试标记转义序列,如\ n,\ r \ n等。要防止此错误,您可以替换' \'用' \\'并且JVM将其作为常规路径读取。因此,您可以尝试以下代码而不是上面的代码:

String path = "C:\\Folder\\AnotherFolder\\file.txt";