2015-05-06 4 views
0

У меня есть программа, которая требует пути к файлу. В настоящее время, он настроен так:указать путь к файлу внутри 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, spefically resource слово?
  2. Как указать путь к файлу на диске?

Я попробовал эти варианты, но файл не удается найти:

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); 
    } 
} 
+1

Не могли бы вы показать код, где '' ACOUSTIC_MODEL_PATH' или DICTIONARY_PATH' фактически используется? –

+3

Почему бы не попробовать что-то вроде D: /cmudict-en-us.dict? – Alexandr

+0

@Alexandr, я попробовал, я получаю эту ошибку 'InternalConfigurationException: Bad URL D: /cmudict-en-us.dictunknown protocol: d' –

ответ

1

resources:/ Кажется, что это просто внутренний шаблон, который используется в программе (см jarPattern регулярное выражение, которое должно быть объявлено где-то в вашей программе). Это не общий синтаксис описания URL-адресов. Но если этот шаблон не соответствует, резервная реализация должна обрабатывать строку в качестве URL-адреса. Локальные URL-адреса файлов всегда начинаются с file:///, за которым следует нормальный путь, где обратные косые черты заменяются косой чертой.

Попробуйте следующую строку, это действительный URL:

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

+0

Да, это сработало. Не могли бы вы немного подробнее рассказать о различиях между 'resources:/edu ...' и 'file: /// d: /' и почему 'файл: /// d /' работает в то время как 'file: // d/'не делает? –

+0

Спасибо, не могли бы вы рассказать мне, что эта строка для файла 'location =": "+ location;'? Я думал, что могу использовать такой путь, как этот '/// d/...', так что 'file:' добавляется, и я получаю действительный URL-файл: /// d/... ', но я получил ошибку показывая конкатенированный путь как «Загрузка словаря из: file:/d/cmudict-en-us.dict' –

+0

Возможно, этот филиал будет работать в Unix-системах, где у вас нет букв дисков, но никогда не тестировался в Windows. Думаю, лучше проигнорировать это. –

0

Если вы хотите укажите путь на диске, вы можете использовать его абсолютный путь следующим образом:

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

Проблема с этим, однако, заключается в том, что символ «\» может вызывать проблемы, поскольку java распознает его как попытку отметить escape-последовательность, такую ​​как \ n, \ r и т. Д. Чтобы предотвратить эту ошибку, вы можете заменить '\' на '\\', и JVM будет читать его как обычный путь. Таким образом, вместо указанного выше кода, вы можете попробовать это:

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

Спасибо, я так пробовал, я получаю эту ошибку:' InternalConfigurationException: Bad URL D: \ cmudict-en-us.dictunknown protocol: d' –

+0

Да, символ «\» используется в строках для обозначения escape-последовательности со специальными значениями. Чтобы отменить его и позволить ему читать как обычную обратную косую черту '\', вам нужно использовать двойную обратную косую черту '\\' – JavaFanatic

+0

Я знаю, я использовал двойную обратную косую черту. –

Смежные вопросы