FileNotFoundException(文件名、目录名或卷标语法不正确)
FileNotFoundException (The filename, directory name, or volume label syntax is incorrect)
我正在尝试访问这样的文件:
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 中时,它工作得很好。但是,如果我将项目导出为 运行nable jar,则会出现以下错误:
java.io.FileNotFoundException: file:\C:\Users\Linsane\Desktop\server\SpellcheckerServer.jar!\deutsch.txt (The filename, directory name, or volume label syntax is incorrect)
虽然我知道该文件位于此位置,但由于我没有自己构建路径,所以我真的不知道哪里出了问题。
尝试删除 getClassLoader() 调用:
File file = new File(getClass().getResource(fileName).getFile());
您也可以手动打开jar文件,查看是否真的打包进了jar文件。
我用EJP的小费解决了&
而不是像这样传递文件:
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 的输入流并从中读取。
我正在尝试访问这样的文件:
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 中时,它工作得很好。但是,如果我将项目导出为 运行nable jar,则会出现以下错误:
java.io.FileNotFoundException: file:\C:\Users\Linsane\Desktop\server\SpellcheckerServer.jar!\deutsch.txt (The filename, directory name, or volume label syntax is incorrect)
虽然我知道该文件位于此位置,但由于我没有自己构建路径,所以我真的不知道哪里出了问题。
尝试删除 getClassLoader() 调用:
File file = new File(getClass().getResource(fileName).getFile());
您也可以手动打开jar文件,查看是否真的打包进了jar文件。
我用EJP的小费解决了&
而不是像这样传递文件:
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 的输入流并从中读取。