【问题标题】:Input Stream not working in command prompt输入流在命令提示符下不起作用
【发布时间】:2013-12-17 21:00:56
【问题描述】:

嗨,我做了一个 Java 程序,它从 CSV 读取行作为数据记录。我遇到的问题是该程序在 Eclipse 控制台中完美运行,但是当我尝试使用 Java 编译器从 cmd 运行问题时,我的代码指定 CSV 文件的位置时不起作用,它在那里显示一个未知错误。我已经尝试了一切,例如将文件移动到另一个包中或使用其他一些代码来读取文件我得到了相同的结果,这在 eclipse 中它可以工作,但在实际的 cmd 中它不起作用。下面是错误和读取文件的方法。

java.io.FileNotFoundException: src\PostCodeENW.csv (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at Java.io.FileReader.<init>(Unknown Source)


public void loadfile() {
        System.out.println(System.getProperty("user.dir")); 
        String csvFile = "src/PostcodeENW.csv";
        BufferedReader br = null;
        String line = "";

        try { 
            br = new BufferedReader(new FileReader(csvFile));
            while ((line = br.readLine()) != null) {

                String[] ar = line.split("/");

                PostCode = ar[0].trim().replaceAll("  ", " ");
                String[] ar1 = PostCode.split("\\s");
                String PostCodeP1 = ar1[0];
                String PostCodeP2 = ar1[1];
                int Easting = Integer.parseInt(ar[1]);
                int Northing = Integer.parseInt(ar[2]);
                String Ward = ar[3];

                Location geo = new Location(PostCodeP1, PostCodeP2, Easting, Northing, Ward);
                map.put(geo.getkey(), geo.getValue());
//          System.out.println(PostCodeP1 + " " + PostCodeP2 + " " + Easting + " " + Northing + " " + Ward); 
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("Done Adding all records");
        System.out.println("Database currently holds: " + map.size()); //Test how much elements are currently in the HashMap
      }

【问题讨论】:

    标签: java cmd bufferedreader filereader


    【解决方案1】:

    您从哪里运行 java 文件?它在当前目录中查找文件夹“src”,然后在文件夹“src”中查找文件“PostcodeENW.csv”。 因此,如果命令行与该文件夹和文件所在的目录不同,则会出现错误。

    尝试在文件夹“src”所在的同一目录中运行java文件

    在命令行中使用cd %HOMEPATH%/Documents/workspace将目录更改为eclipse工作区 如果 eclipse 工作区在您的用户文件夹中,在您的文档中,在一个名为工作区的文件夹中。

    【讨论】:

    • 终于可以了,但我不明白当你在 Eclipse 中创建一个新项目时,你会得到一个名为 src 的文件夹,然后是我导入 CSV 文件的默认包,它会在默认包中自动导入。如果我真的查看我的项目文件夹,我有 2 个文件夹和 2 个名为 bin、src、.classpath 和 .project 的文件这是否意味着我应该将 bin 的内容复制到目录中并删除 bin 文件夹?还是我需要更改我的代码?
    • 如果您乐于从 Eclipse 中运行 Java 文件,则无需删除 bin。但是如果你想从命令行运行 Java 文件,你需要将 bin 的内容复制到 src 中,这样 Java 文件才能看到 csv 文件。我个人建议将 csv 文件复制到 bin 和 src 文件夹中。
    【解决方案2】:

    编译后,src 路径将不再存在。据我了解eclipse,它只会从src文件夹中jar类文件,这意味着一旦编译和打包,文件PostcodeENW.csv就不太可能存在。

    你需要尝试两件事,

    首先,将PostcodeENW.csv 文件移动到项目中的资源目录中

    一旦构建并打包,eclipse 会将资源目录的内容包含在 jar 中。这意味着这些资源将不再作为文件访问,而是成为嵌入式资源

    其次,更改代码,以便在读取文件时将其作为嵌入式资源读取,例如

    String csvFile = "/PostcodeENW.csv";
    //...
    br = new BufferedReader(new InputStreamReader(getClass().getResourceAsInputStream(csvFile)));
    

    Nb-我不使用eclipse,所以我会做我理解需要做的事情,但这些是基本的想法;)

    【讨论】:

    • 感谢 MadProgrammer 现在我知道如何正确组织资源并使用它们了,哈哈
    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 2018-06-20
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2010-12-13
    相关资源
    最近更新 更多