Java 项目在eclipse中运行,但不在命令行中:未找到文件异常

Java 项目在eclipse中运行,但不在命令行中:未找到文件异常,java,eclipse,file,runtime-error,Java,Eclipse,File,Runtime Error,当我在eclipse中运行代码时,它运行得非常好,但是当我通过命令行运行它时,它出现了一个错误,我环顾四周,但找不到一个有效的答案。我得到的错误如下: C:\Users\Name\Documents\Java Projects\PokemonBattle\Builds>java -jar v1.0.jar java.io.FileNotFoundException: src\data\pokemon.csv (The system cannot find the path specifi

当我在eclipse中运行代码时,它运行得非常好,但是当我通过命令行运行它时,它出现了一个错误,我环顾四周,但找不到一个有效的答案。我得到的错误如下:

C:\Users\Name\Documents\Java Projects\PokemonBattle\Builds>java -jar v1.0.jar

java.io.FileNotFoundException: src\data\pokemon.csv (The system cannot find the path specified)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileReader.<init>(Unknown Source)
        at pokemonFramework.ReadCSV.read(ReadCSV.java:30)
        at pokemonFramework.Pokemon.getPkmnInfo(Pokemon.java:174)
        at main.PokemonBattleClient.<init>(PokemonBattleClient.java:64)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at processing.core.PApplet.runSketch(PApplet.java:10453)
        at processing.core.PApplet.main(PApplet.java:10279)
        at processing.core.PApplet.main(PApplet.java:10261)
        at main.PokemonBattleClient.main(PokemonBattleClient.java:89)
java.lang.NullPointerException
        at pokemonFramework.ReadCSV.read(ReadCSV.java:47)
        at pokemonFramework.Pokemon.getPkmnInfo(Pokemon.java:174)
        at main.PokemonBattleClient.<init>(PokemonBattleClient.java:64)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at processing.core.PApplet.runSketch(PApplet.java:10453)
        at processing.core.PApplet.main(PApplet.java:10279)
        at processing.core.PApplet.main(PApplet.java:10261)
        at main.PokemonBattleClient.main(PokemonBattleClient.java:89)
C:\Users\Name\Documents\Java项目\PokemonBattle\Builds>Java-jarv1.0.jar
java.io.FileNotFoundException:src\data\pokemon.csv(系统找不到指定的路径)
位于java.io.FileInputStream.open0(本机方法)
位于java.io.FileInputStream.open(未知源代码)
位于java.io.FileInputStream。(未知源)
位于java.io.FileInputStream。(未知源)
位于java.io.FileReader。(未知源)
位于pokemonFramework.ReadCSV.read(ReadCSV.java:30)
位于pokemonFramework.Pokemon.getPkmnInfo(Pokemon.java:174)
位于main.PokemonBattleClient。(PokemonBattleClient.java:64)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于java.lang.Class.newInstance(未知源)
运行草图(PApplet.java:10453)
位于processing.core.PApplet.main(PApplet.java:10279)
位于processing.core.PApplet.main(PApplet.java:10261)
位于main.PokemonBattleClient.main(PokemonBattleClient.java:89)
java.lang.NullPointerException
位于pokemonFramework.ReadCSV.read(ReadCSV.java:47)
位于pokemonFramework.Pokemon.getPkmnInfo(Pokemon.java:174)
位于main.PokemonBattleClient。(PokemonBattleClient.java:64)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于java.lang.Class.newInstance(未知源)
运行草图(PApplet.java:10453)
位于processing.core.PApplet.main(PApplet.java:10279)
位于processing.core.PApplet.main(PApplet.java:10261)
位于main.PokemonBattleClient.main(PokemonBattleClient.java:89)


提前谢谢

我假设您是从Builds目录启动程序,而不是从项目根目录启动程序。因此无法解析路径src\data\pokemon.csv。您必须将jar复制到项目根目录,或者使用java-jarbuilds\v1.0.jar从项目根目录启动程序。jvm正在从其工作目录中查找src\data\pokemon.csv。该文件似乎位于eclipse项目内部。这是以前提出过的问题。继续搜索我将jar构建为一个可运行的jar,其中包含文件。不能使用文件读取器从jar中读取。它在Eclipse下工作,因为pokemon.csv在src目录中仍然可用,所以您的程序使用它。如果要从jar中读取文件,则必须使用classloader的getResourceAsStream方法。您必须从路径中删除“src”。因此,如果您想在其上使用读取器,就必须在read()方法中使用InputStreamReader,这就是这个.getClass().getResourceAsStream(“data/pokemon.csv”)。新的InputStreamReader(this.getClass().getResourceAsStream(“data/pokemon.csv”))