FileNotFoundException(文件名,目录名或卷标语法不正确)

时间:2018-05-21 18:11:41

标签: java java-io filenotfoundexception

我正在尝试访问这样的文件:

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!");
 }
}

当我在eclipse中运行我的代码时,它运行得很好。但是如果我将项目导出为可运行的jar,我会收到以下错误:

  

java.io.FileNotFoundException:file:\ C:\ Users \ Linsane \ Desktop \ server \ SpellcheckerServer.jar!\ deutsch.txt(文件名,目录名或卷标语法不正确)

虽然我知道该文件位于此位置,并且由于我自己没有构建路径,所以我并没有真正理解错误。

2 个答案:

答案 0 :(得分:-1)

尝试删除getClassLoader()调用:

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

您也可以手动打开jar文件,并检查文件是否实际打包到jar文件中。

答案 1 :(得分:-1)

我用EJP&amp;的尖端解决了它。 What's the difference between a Resource, URI, URL, Path and File in Java?

而不是像这样传递文件:

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

我现在将URL传递给文件,如下所示:

{{1}}

在Spellchecker构造函数内部,我只需获取URL的Inputstream并从中读取。