FileNotFoundException (неправильное синтаксис имени файла, имени каталога или метки тома) - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь получить доступ к файлу, как это:

public class Main {

 private static class RemoteAdapter implements SpellcheckerRemoteAdapter {

  private Spellchecker spellchecker;
  private String fileName = "deutsch.txt";
  File file = new File(getClass().getClassLoader().getResource(fileName).getFile());

  private RemoteAdapter() {
   this.spellchecker = SpellcheckerFactory.createSpellchecker(file);
  }

  @Override
  public boolean check(String word) {
   return this.spellchecker.check(word);
  }

  @Override
  public List < String > getProposal(String word) {
   return this.spellchecker.getProposal(word);
  }

 }

 public static void main(String[] args) {

  System.out.println("Start Server");
  try {
   Registry registry = LocateRegistry.createRegistry(1088);

   SpellcheckerRemoteAdapter adapter = new RemoteAdapter();
   UnicastRemoteObject.exportObject(adapter, 0);
   registry.rebind(SpellcheckerRemoteAdapter.NAME, adapter);
  } catch (RemoteException re) {
   System.out.println(re.getMessage());
  }

  System.out.println("Server is running!");
 }
}

Когда я запускаю свой код внутри затмения, он работает просто отлично.Но если я экспортирую проект как исполняемый файл jar, я получаю следующую ошибку:

java.io.FileNotFoundException: file: \ C: \ Users \ Linsane \ Desktop \ server \ SpellcheckerServer.jar! \deutsch.txt (Неверный синтаксис имени файла, имени каталога или метки тома)

Хотя я знаю, что файл находится в этом месте, и поскольку я сам не строю путь, я недействительно понять, что пошло не так.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я решил это с помощью подсказки EJP & В чем разница между ресурсом, URI, URL, путем и файлом в Java?

Вместо передачи файла следующим образом:

private String fileName = "deutsch.txt";
  File file = new File(getClass().getClassLoader().getResource(fileName).getFile());

  private RemoteAdapter() {
   this.spellchecker = SpellcheckerFactory.createSpellchecker(file);
  }

Теперь я передаю URL-адрес файла следующим образом:

private String fileName = "deutsch.txt";
URL url = ClassLoader.getSystemClassLoader().getResource(fileName);
private RemoteAdapter() {
        this.spellchecker = SpellcheckerFactory.createSpellchecker(url);
}

Внутри конструктора Spellchecker я просто получаю входной поток URL-адреса и считываю его.

0 голосов
/ 21 мая 2018

Попробуйте удалить вызов getClassLoader ():

  File file = new File(getClass().getResource(fileName).getFile());

Вы также можете открыть файл jar вручную и проверить, действительно ли файл упакован в файл jar.

...